Provide a few ways to customize JSON serialization

- Allow a custom `JSONEncoder` class to be specified via the
  `tangled.app.representation.json.encoder` setting. This would
  typically be a subclass of json`.encoder.JSONEncoder` that provides an
  implementation of the `default()` method. If specified, it's passed to
  `json.dumps()` as the `cls` arg.
- Allow a custom object converter to be specified via the
  `tangled.app.representation.json.default` setting. If specified, it's
  passed to `json.dumps()` as the `default` arg.
- If neither of the above settings is specified, classes can define
  a `__json_data__()` method to return a data structure that the
  JSON encoder can handle.
Include representations in 3xx responses when appropriate

If a resource method returns data for a 3xx response, that data should
be returned to the client. Previously, all such data was discarded.

In particular, responses with a 300 status code "SHOULD include an
entity containing a list of resource characteristics and location(s)
from which the user or user agent can choose the one most appropriate."

The spec also recommends that most other 3xx responses SHOULD include
"a short hypertext note with a hyperlink to the new URI(s)."