Fix issue #25

Instead of first matching against the route and then checking the
allowed methods, the dispatch now happens in reverse: Only the
routes for a particular method are considered initially.

If there is no route for the specified method, the URI will be
matched against all other methods as well in order to determine
the allowed methods list (or conclude that no route exists at all).

The performance impact of this change is twofold: On the one hand
fewer matches are required in case a route is found (because only
the method we're actually interested is tested). On the other hand
there is more logic and potentially also more matches necessary in
cases where a method-not-allowed or not-found status occurs.