Write test for invalid json overheard

This is very similar to the previous test; except it's testing the
*negative* condition. We want to:

1. Use an HTTP status code to declare the request was invalid
2. Provide errors as part of our response
3. *NOT* create an Overheard if it doesn't have a body
Ensure the overheard app has access to `json`

Ha! Our tests didn't detect a critical error! Because we `require
'json'` in our `test/features/helper`, it provides the application
access to the `json` library when running tests!

Automated tests will never replace exploratory and context driven
testing; as even experienced programmers make mistakes like this.
API documentation for erronous overheards

Documenting how our API deals with erronous requests can prevent a lot
of head scratching when someone writes some code to interact with our
API.

I also wound up verifying the documentation is accurate. Did you know
ruby's JSON parser barfs if you use `'` instead of `"` to surround the
key names? NEITHER DID I!
Provider errors on invalid API calls

When the overheard added via the api can't be saved; we want to let the
user know that there was an error and on which fields.

The Datamapper::Resource `errors` object is a kind of Enumerable; so
that means we can call `.to_h` to get the errors as a hash where the
attributes are the keys and an array of errors are the value. This is
perfect for our api consumers.

Unfortunately we're starting to get a bit of duplication that is kind of
nasty. We'll want to fix that soon...
Remove duplication in `post "/overheards"`

BAM. This refactoring:

1. Creates a helper for accessing request data, regardless of if it's
   passed in via a form or JSON
2. Removes a couple nested ifs
3. Removes the need for `post "/overheards" to know whether JSON was
   submitted or a form was submitted (though it still needs to know what
   kind of content the requester will accept)
4. Removes duplication of two calls to `Overheard.create`

Hopefully this makes the code a bit easier to read and understand.
Thoughts?