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").
Non-blocking: Would like to have `auth_interval` and `auth_retry_times` argument that controls how many times to retry and at what interval. The reason I prefix it with `auth` is because this API is being clubbed with other methods which may have its own retry things. This is probably one of the reasons I find class based composable `treq` implementations nicer. But at same time would not like it to be here as that responsibility is there in otter's retry since it has better features such as exponential retry. Maybe there should be another effect based retry that can be used here?