Add support for configurable exception handlers.

The controller uses configured exception handlers to map
exceptions to responses.  Handlers are similar to grails marshallers;
they can be registered in priority order.  When the controller
encounters an exception, the first handler that supports the
exception is used to produce a response.

By default, all the previous exception handling behavior remains
the same, but can now be added to or overridden as necessary.