WithDeadline returns a child context that expires with a custom error after
the supplied deadline, and a cancellation function that accepts custom errors.
WithTimeout returns a child context that expires with a custom error after
the duration expires, and a cancellation function that accepts custom errors.