Bug 1078520 - python client

Implement a python client.  Note to reviewers, there were a couple fairly substantial changes to the way the module in the latest commits.  It's probably best to only really look at the most recent code.
> Ok, I just usually try to avoid hardcodes where possible.

Hmm... can we agree on using a constant `HAWK_ALGORITHM = 'sha256'`
And then not expose it to consumers.

> if we ever change algorithms

Then we break backwards compatibility and everybody will need to update. Whether they just update configuration of the package or the package... Everybody will have to update something.
We're not going to do this :)
If we do, we'll probably keep support for the old algorithm serverside, for some migration period.

> Does caching the hawk stuff actually give any real performance improvement compared to the overhead of making an HTTP request and weighted against the frailty of caching values derived from mutable sources?

Probably not... But when I did it in node, the whole JSON.stringify + base64 encoding... seemed like a lot to repeat (on every request and retry). On node we do have components that makes a lot of requests... the scheduler basically only does azure table, pulse and requests to the queue.