Separate the HTTP method from the path in the route.

A route is the addition of a path and an HTTP method.  The HTTP method
is stored along the path for each route.

By default, if a route is created without the HTTP method specified,
routes for the GET PUT POST DELETE methods are created.

This should allow some introspection on route in the future.
Maintain a list of routes and their methods.

This is useful for future introspection features.
Add default OPTIONS route.

Unless this feature is disabled, a default OPTIONS route is added for
every exiting route.  Also, add a 405 Method Not Available for all the
non existing methods for a given route.

This way, if you define a GET and DELETE for a route, but no POST, PUT
and PATCH, a 405 will be returned to the client if it tries to reach one
of this endpoint.