19 parse json requests

- Adds new middleware `ParseJSONBody` that will parse the request body adds all key/value pairs it finds to the rack `env`, as if it was sent as form data.
  - It requires that the request contain a `Content-Type` header that ends in `json` for it to kick in
- If the json can't be parsed, a 400 error will be returned (via new `JSONParseError` class)
- The middleware will run before `SanitizeParams` so that we can properly enforce business rules as defined on the resource
- If any query string values exist that use the same key as one of the params parsed, the json value should win out.

refs #19