Content Negotiation

A funny thing happened on the way to getting `hyperdrive` to support content negotiation…

  - nearly the entire design of this gem has been overhauled
  - no longer uses the `Singleton` mixin from the ruby stdlib in favor of a more flexible singleton approach using a "self-extended" `Module`
  - extracts most HTTP logic into a mixture of custom and stock `Rack` middleware (including but not limited to Content Negotiation)
  - fleshes out the DSL with more options for describing the API itself, as well as each `Resource`
  - cleans up the specs and adds more test coverage to the remaining logic

It still has a few warts and completely favors json media types, but all-in-all, this branch gets `hyperdrive` ready for prime time.