Checking in work in progress on S3 support as well as a few other things.
Add nose to requirements.txt

I think travis ci has this installed by default,
but to run the tests locally nose has to be
installed.
Refactor auth module to use requests auth plugins

This also upgrades the requests version to the latest
(1.1.0).

One of the problems with the request auth plugins is
that the auth handlers are invoked on a more or less
prepared requests.  This means the query params have
been encoded and the post body params have also been
urlencoded.  This means that we have to re-parse the
query string and post body params, process/modify them
as needed, the re-urlencode them.  Not ideal.

Sigv2 auth handler implementation

Update sigv4 to use requests auth plugin
Update auth to use Request object

So originally I used the auth metchanism built into request 1.0 (the
auth param to the request.(get|post|etc.) method).  However, I ran into
a problem, which is that the auth plugins operate on a PreparedRequest,
which already have the query string/post body params urlencoded.
In order to do signature calculations, I had to re-parse the query
string and/or post body params into a dict, update the dict accordingly,
then re-urlencode the params.  Not ideal.

So then I started with using Request/PreparedRequest objects directly,
but then I ran into another issue, namely that I needed access to the
urlencoded post body for sigv4 (i.e the "payload" for the sha256).

So what I've done for now is to use our own AWSRequest class which
subclasses requests.models.Request.

This will allow us the flexibility to add whatever hooks/extension
points we want to the request/response going forward, and we
*should* be able to isolate ourselves from any changes that happen
in the request.models module (not sure how stable of an API this is).
Add signature version 3 (https)