Make the HTTP client more generic

This way we can send other headers and use HEAD requests.

Also fixes some cases where !progress would crash.

-[Unknown]
Oops, that was a mistake.  I was only using TakeAll() so I didn't notice, darn.

I just want to avoid having to create a std::string, copy the output data from a Buffer to that, and then memcpy it to the output pointer from there.

-[Unknown]