adds Param object to encapsulate resource params

  - params have two new options: type and contraints to further describe
    the input
  - param related logic (like checking which methods its required for)
    moved to the new class
  - Param#to_hash method creates a useful construct for documentation
    and hateoas purposes
adds Filter object to encapsulate resource filters

  - is a subclass of Param, but with it's own initialize method (to
    handle required option differently)
clean up and clarification
fixes incorrect logic and uses renamed method
use renamed method
adds default_filter to TestData
w/s
adds generic content_type for the resource

this content type doesn't include the resource namespace or version.
added to help clients have at least a default media type to fall back
on
requires hyperdrive's config be injected into resource

helps decouple us from the dsl that creates the resources
updates Docs to keep up with changes to params/filters
moves Rack::Accept::MimeType into separate middleware

that way other middleware can count on it being available as
env['hyperdrive.accept']
adds hyperdrive.accept to default_rack_env
require oj and ox
rename desc to description
adds to_hash method and clarifies argument name
adds HATEOAS middleware to handle root api discovery info
integrates new hateoas endpoint into server
add endpoint name to to_hash output
rescues HTTPError and returns formatted message
dropping singleton implementation in favor of new approach