Pure HTTP client, based on effect

This was extracted from my heat-reauth branch.

It adds a new HTTP client function, otter.util.pure_http.request, which returns an Effect and has a lot of built-in convenience.
It might be good to document the keys and values of the dictionaries (e.g. it looks like the reqs dictionary maps the tuple of all the request args to a `StubResponse`, and contents maps `StubResponse`s to string content?