Fix open socket leak

Good news:
This commit appears to fix the resource leak that breaks long-running
apps.

Bad news:
We have to be extra careful to make sure all http requests are cleaned
up properly, or apps will silently stop working (not crash). 

As part of cleaning up resources, response bodies must be [read from
before being closed](https://stackoverflow.com/questions/17948827/reusing-http-connections-in-golang).