Split Chef::REST into components.

Splits the responsibilities of Chef::REST into middleware-like classes, and extracts a base HTTP class that can be subclassed with a custom middleware stack. Aside from making the code readable and clearly delineating where things are ugly-but-exist-for-compatibility-reasons, it also will make it easier to implement persistent http, custom SSL verification behavior, custom JSON parsing behavior, etc.