Manually parse JSON in requests

This means that handling of parse errors won't trigger exception emails and is
consistent/predictable across environments.

It also means that empty arrays, for example, aren't converted to nil, which
was making validating against a schema harder.

We are no longer using strong params to limit the params that are processed.
Filtering supplied parameters will be a concern when we come to send data to
Content Store, but isn't yet.