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").
I could make the "log" argument purely a responsibility of the performance, but that would mean that the caller of request() couldn't provide additional bindings to that log. This is a little bit important so that we can make sure we can connect the logged HTTP requests with the code that's performing them.

I think the best alternative is to not use logging_treq, but instead have a wrapper around our request function that takes the log argument and uses it to log some stuff about the request.