Allow to/from_json to throw

Do not implement to/from_json in terms of the (de)serialize()
methods of a temporary Serializer instance, since the error
generated is lost and they will just return undef. Let them throw
instead so that the route code can handle the exception, or propagate
to general "route died" handling. Configuration options are still
merged in using a temporary instance.

Add test dependency on Test::Trap for testing exceptions.

Add unit tests for unserializable data for the JSON serializer.