Extract HTTP client from request

This allows us to change the top level HTTP client, e.g., to
Net::HTTP::Persistent
WIP/HACKS - FIXME

Changes the structure of HTTP requests so that we create an HTTP client
object and then ask it to make requests. This enables us to use
persistent connections in the future just by customizing a small part of
the HTTP client's behavior (so we could use persistent connections
_just_ for cookbook upload/download, but not for other requests).
HOWEVER:

* Some tests are broken
* The way HTTP retry logic is written works by yielding a request
  object. This creates a request object we never use.
* The old Chef::REST allows you to make a request to an arbitrary server
  by passing a full URL to get/put/post/delete/etc. Trying to do this
  will probably behave weirdly (wrong) in the current state. I'm pretty
  sure this behavior is relied on _somewhere_ so it needs to be fixed,
  at least for code that uses Chef::REST.