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]