Cache the urllib3 HTTPResponse instead of the requests Response

Enables the use of requests.models.Response().raw by caching the
raw urllib3 HTTPResponse instead of the requests Response. We can
then construct a new Response on each request. This will also
enable things like resp.encoding and the future resp.content_encoding
to work correctly.

Some Notes:
  * Vary headers are currently broken because what we cache no longer
    has access to the request that made it.
  * This is backwards incompatible with the current cache handling
    code, that should be gracefully handled.
  * All requests, streaming or not, are still consumed immediately and
    are now replaced by a io.BytesIO backed HTTPResponse.