Introduce a possibility to add metadata to routes and intercept route execution

It is now possible to attach metadata object to a route containing additional information about the route. It is also possible to attach a listeners for route execution with the interceptRoutes -method. The attached interceptors will be called with the current and previous route information once the route has been evaluated.

These features are useful for example analytics purposes, one can attach analytics information to route metadata and listen for route execution and trigger requests to an analytics service after a route has been served.