"heat reauth", with general-purpose 401-handling pure HTTP client

So, this is a big branch, and is probably still pretty rough.

NEW STUFF:

- pure_http, a new library for purely functional HTTP requests
- heat_client uses pure_http
- some testing utilities

This branch adds a dependency on the "effect" library. It currently uses *unreleased* features of that library, I'll do another release of effect today to get everything in sync.

It also adds a dependency on "characteristic".

It also has manish's IsBoundWith branch merged in, so the diff currently shows that code.


NOTE: right now there isn't actually a reauthenticating function *implemented*, just the framework for invoking it to get the new token, and then using that new token. 
:+1: Assuming it's `self.treq.request(self.method, self.url, headers=self.headers, data=self.data, log=self.log)` (IIRC calling `request` makes the request, `getattr(self.treq, self.method)` would just get you the method to call)