Allow request module override

Relating to #15

These changes accomplish a few important goals:

- Allow apps to override the request handler.
- Pull request parsing out of the api modules.
- Options passed to the request handler more closely conform to node core's [url spec](http://nodejs.org/docs/latest/api/url.html#url_url).

This allows 'userland' add-ons such as [memcached protocol support](https://github.com/cpsubrian/elasticsearch-memcached/tree/refactor).

I've taken care that all tests pass with NO changes to the tests themselves (no API changes).