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.
If this is meant to be `g` instead, perhaps this can be left out because the first sentence in the docstring already states that `g` accepts a callable as its first argument?

If not, why does `f` also need to accept a callable?