Added some convience methods to routing handler.  Handle an edge case fo...

Tests initially failed from the following.

Given 3 routes
GET           /foo
DELETE    /foo
GET          /bar

A request to DELETE /bar will result in a 404 instead of a 405.  

    PathTemplateMatcher<RoutingMatch> matcher = matches.get(exchange.getRequestMethod());
    if (matcher == null) {
        invalidMethodHandler.handleRequest(exchange);
        return;
    }
    PathTemplateMatcher.PathMatchResult<RoutingMatch> match = matcher.match(exchange.getRelativePath());
    if (match == null) {
        fallbackHandler.handleRequest(exchange);
        return;
    } 

Since the routes are first mapped on the HttpMethod we will get a PathTemplateMatcher back which contains DELETE /foo.  It will then fall through to the next if and return a 404.  I think the expected behavior should be 405?  Is looping over ALL PathTemplateMatchers the only way to catch this?
This doesn't seem as clean as I thought it should be.  I may have made a poor assumption when I originally added the addAll methods to RoutingHandler and PathTemplateMatcher.  If I used addAll on allMethodsMatcher it will fail with an exception because multiple routes have the same path.

The only other solutions I can think of is make allMethodsMatcher a CopyOnWriteMap instead of a PathTemplateMatcher and store the raw path template strings.  This might require duplicating the trimBase logic from PathTemplateMatcher. A second solution would be to make PathTemplateMatcher aware of the HttpMethods.