Substitute HTTP Host header when proxying and fix HTTP socket reading.

* This fixes a bug with the HTTP socket reading. The previous code was looking for a Content-Length header and then reading until that many bytes for the *whole* message, but it should have been reading that many bytes *after* the end-of-headers (\r\n\r\n) point. I changed it to just pipe the data straight through, which will also work in cases of chunked encoding.
* Change the HTTP Host header in requests when proxying HTTP to a backend. Otherwise, if you make an HTTP request through the proxy to localhost, the remote server was seeing `Host: localhost:8888` which is not right. It changes it to the host/port string of the backend before sending the request.