Move auth handling and most hooks out of requests

An auth handler for S3 requires knowledge of the path used to generate
a request's URL.  This means that the auth handler needs a reference to
some bit of outside information that the requests library isn't going to
provide it with so it can determine what that is.  In this case, we give
the auth handler a (weak) reference to the service that generated it so
it can inspect the service's URL to determine that info.  We also
manually call the auth handler (and most of the hooks) outside of the
requests library's control.

This also has the effect of adding support for requests version 1.
Handy, that.