GetCancelReason retrieves the cancel reason for a context that has been
created via WithCancelReason. The reason will be nil if the context was not
created with WithCancelReason, or if the context has not been canceled yet.
Otherwise, the reason will be the error that the context's
CancelWithReasonFunc was invoked with.

RunWithTimeout runs a function with a timeout, the same way you'd do with
context.WithTimeout. It improves the opaque error messages returned by
WithTimeout by augmenting them with the op string that is passed in.

WithCancelReason adds a CancelFunc to this context, returning a new
cancellable context and a CancelWithReasonFunc, which is like
context.CancelFunc, except it also takes a "reason" error. The context that
is canceled with this CancelWithReasonFunc will immediately be updated to
contain this "reason". The reason can be retrieved with GetCancelReason.
This function doesn't change the deadline of a context if it already exists.