Resign failed requests to refresh timestamp

If the request timestamp is not updated before a retry, it may
eventually fail with a RequestTimeTooSkewed error. Resign the request
before retrying so that the timestamp is updated. This requires some
refactoring to pass through the signer to _send_request().