Don't serialize/deserialize when no content:

Although we used to serialize when we only had content, this didn't
extend to deserialization. Also, we would run the before hook even
though there was nothing we would serialize.

Now the rules are clearer:
* If there is no content, do not serialize or deserialize.
* If there is no serialization going on, such as in lack of content,
  do not call the hooks for it.

An additional change was made to building the parameters. It would
automatically go through deserialization. Then the result would be
used as the paramters.

Even though we didn't deserialize anymore (no content), we would
still return empty. Those parameters were then used. Instead, now
we simply don't call deserialization when building parameters unless
there is content to deserialize.

This resolves GH #797. There is also an added test for this.

This also relates to a known issue: serializers don't send errors,
which means that a failed serialization/deserialization does not
produce an error. The content is just ignored instead. That results
in a successful (200) response instead of generating a 500 right
then and there.

The test also has a TODO item testing this. Hopefully once we add
proper exception objects, we'll be handling that too.
reflect change
Merge branch 'fix/deserialize-empty-body'