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.
And we always want to read the response anyway, even behind the scenes :|  otherwise it triggers that annoying hanging forever bug (although now it's just a failure, not a hanging forever bug)