Behavior for retrying a 0-arity function according to some strategy
callable() :: (() -> {:ok, any()} | {:error, any()})
response() :: {:ok, any()} | {:error, any()}
retry(fnc :: callable(), opts :: list()) :: response()