Comprehensive HTTP Router

Here is a partial solution to Issue #202, at least for different HTTP methods.  There is no provision for websocket or SSE support here.  This is more or less a port of the excellent Vert.x RouteMatcher for RxNetty.  I do want to point out that I had to force queryParameters to be mutable on HttpRequest for this particular implementation.
This model does not allow composing multiple match criterion, instead, it will require us to add a method as this for each combination.

It will instead be better to let user create a composed criterion and pass it to us. The DSL could look like:

```
router.forUri("/").withMethod(GET).withQueryParam("foo").value("bar").route(requestHandler);

router.forMethod(GET).withUri("/").withQueryParam("foo").value("bar").route(requestHandler);
```

and methods like that.