Changed the methods 'matchesWith' and 'extractDataFrom' inside the route with the more descriptive 'matchesWithUrl' and 'extractDataFromUrl'.
Added a dispatcher class that will convert the route corresponding to the current URL into a page that can be rendered. Before, a route created his corresponding page himself when a page factory was passed. This gives the route too much responsibility and is hereby corrected.
Renamed the old Router to RouteCollection. The new router creates a route based on the given request, instead of a URL. The route collection still finds the right route based on the URL that is passed in from the router. Extra GET data from the URL is also extracted and passed to the request inside the router.
Let the application coördinate the extraction of GET data from the URL, instead of the router. The application will pass the found route to the request, the request will then query the route for extra data and append it to the GET data it already has. This way the request knows about the route (bad?), but at least we can't 'just' append GET data via a public method.