pure_http refinements and "bind_root"

This branch factors out the functionality of pure_http even further, dropping the "request" function, and splits the tests up into several suites. 

- The auth functions only need an *effect* that fetches auth headers or invalidates a cache, not a callable-of-no-arguments that returns an Effect, so the interface is simplified there
- renamed "reauth" to "invalidate" in a few places, to emphasize that the main behavior is about invalidation, while reauthenticating is just a secondary side-effect of that which occurs when another request happens.
- Add a new "bind_root" function, which returns a new request function where all requests are relative to the previously specified URL root.
- also updated to effect 0.1a7, which changes the signature of effect.twisted.perform (and also introduces some other useful functionality that will be necessary in future PRs).

Sadly the diff is bigger than it deserves, simply because a lot of code got slightly refactored, but really not much has changed.
yeah, the naming here is tricky, and I see now that it's used inconsistently a bit throughout otter.

"request" - a request function
"get_request" - also a request function, sometimes :)
"get_request_func" - get a request function.

At the very least I could unify "get_request" and "request". I think I named "get_request" while thinking "get a pure_http.Request object". I think just "request" is fine.