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.  From a maintenance point of view, it's frustrating to have to release a new version of this library, deploy it to all consumers who might not want all the changes if we ever change algorithms instead of being able to do something like
```python
import taskcluster
taskcluster.config['credentials']['algorithm'] = 'rot13'
i = taskcluster.Index()
```
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?

Changed in 40b8ff1