refactor(HttpRouter): generalise HttpRouter for the RequestHandler trait

BREAKING CHANGE

For code implementing HttpRouter, the signature of each method has changed,
adding a type parameter.
refactor(router): move router into module folder
refactor(router): extract HttpRouter to private module
refactor(router): extract RequestHandler to private module
refactor(router): extract Router/Route/RouteResult to private module
refactor(RequestHandler): add ResponseFinalizer trait and impls to generalize return types
docs(macros): update examples to show simplified return types
refactor(ResponseFinalizer): cleanup duplicate code with macros
refactor(ResponseFinalizer): allow response headers
docs(macros): improve error message if trait is unimplemented
docs(examples): show non-macro examples of flexible return types
refactor(requesthandler): allow handlers to return MiddlewareResult
docs(examples): add example of a route propogating an error
docs(request_handler): add some explaination about the default implementation
refactor(ResponseFinalizer): add impl of ResponseFinalizer for Json
feat(ResponseFinalizer): add default mimetypes
docs(hello_world): add a simple hello world example
Merge pull request #94 from Ryman/generics

Flexible route handler return types