Effect-based HTTP client with re-auth and retry support

This should be good for review again.

Note that Effect 0.1a5 now has a generic "retry" function that knows how to retry any effect, which means this code doesn't actually need to do anything to support retries (other than use Effects).

_some_ of the code in otter's retry.py may be useful in that context, but a lot will probably need to be refactored to be useful. (the existing retry.py doesn't support "should retry" checks that return Deferreds, so it's not really useful for the important use case of "check to see if the previous request actually had an effect").
Yes, sorry about that.  Since StubTreq uses the tuple of everything as keys in a dictionary, in order to get the correct response out you would need that exact instance of BoundLog (which was hard to get, since `.bind` was probably called multiple times, unless we have a new version of BoundLog for testing which just stores the kwargs in a dict rather than create partials).

Testtool matchers didn't work either, since it doesn't hash to the same thing as that particular instance of BoundLog.