Package retry provides retry logic.
Call calls the supplied function f repeatedly, using the isRetryable function and the provided backoff parameters to control the repetition.
When f returns nil, Call immediately returns nil.
When f returns an error for which isRetryable returns false, Call immediately returns that error.
When f returns an error for which isRetryable returns true, Call sleeps for the provided backoff value and invokes f again.
When the provided context is done, Retry returns a ContextError that includes both ctx.Error() and the last error returned by f, or nil if there isn't one.
A ContextError contains both a context error (either context.Canceled or context.DeadlineExceeded), and the last error from the function being retried, or nil if the function was never called.