Content types, merging error handler, merging router

This PR has a few major changes:

1. refactoring all engines to be `ContentTypeEngines` and allowing registration of additional content types.
2. Merging the exception and error handlers into a single class
3. Merging the `RouteMatcher` and UrlBuilder into `Router`

The biggest change is the engine refactoring but I think it's worthwhile as it allows for registration of other content types, as needed and is necessary for rendering error responses based on the incoming accept header - i.e. json request, json error response