General refactor of cluster, node, and requests

This should help pave the way for supporting elasticsearch's indexing
APIs. There are a few small changes to the public API:

  - Both SearchRequest and MultiSearchRequest now take an explicit
    `es.SearchParams` as params.
  - MultiSearchRequest is no longer a slice of SearchRequests, but
    instead accepts both `es.SearchParams` and a slice of
    SearchRequests.

And a few internal API changes:

  - Fireable interface now expects a Request method which takes a
    base URL and returns an HTTP request.
  - Cluster no longer uses the event loop for dispatching requests.
  - `searchCommon` on Node is now `Execute` as a generic method for
    executing requests against the node.