Split only once per request the path in components.

There's no need to split the URL in components every time we call the
Match function on a Route.  We can split it once in the dispatcher and
then path the array to the function.

Sadly, this makes the interface a little bit weaker, since we have to
pass the HTTP method and the list instead of the full HTTP Request.  I
think in the future we should pass our own HTTP request object, with the
split already in done in this one.
In each route, keep a map of HTTP methods available.

By keeping a map of the HTTP methods available for a given route, we
don't have to iter over a list of executors when we try to find if the
request match, we can quickly check if the methos is set to true.
Change the interface to create routes.

Previously, to create a route, a user would call the AddRoute function,
and pass three arguments (the path, the HTTP method and the function).

This interface is way too limited if we need/want to expand what a route
is in the future.

Instead, we keep calling the AddRoute function to create a route, but
this time the user pass a Route structure.  The AddRoute will then
apply a few transformations and connect the route to the router.
Add a very simple exemple to the framework.
Routes inside the dispatcher private and check uniqueness of routes

There's no need to expose directly the list of routes inside the router,
we will provide an interface to that later.

Also, when adding a new routes, we verify that the route don't already
exist, and if it's the case, we return an error.
Add a simple test for the dispatcher