Handle range headers

In order to handle range headers (and caching with them), a request needs to make requests recursively, keeping an internal record of the next `Next-Range` header to be sent, as well as an aggregate of response bodies.