chore(routeresult): improve error message for bad param call
feat(routes): add implicit optional format param to routes

BREAKING CHANGE

This will break code that tries to handle routes such as:
'/foo/:bar.:baz'

You can now handle this with:
'/foo/:bar'

When this route matches '/foo/cats.gif' then request.param("format")
will be ".gif"

Fixed #90.
style(router): shorten extremely long lines
fix(routes): allow custom :format variable in route
fix(slicing_syntax): allow slicing_syntax. fixes #95
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