Small refactor of banning/preferred/unpreferred routes: introduce a "RouteMatcher"

In my sense it's way better than the "hacked equals" of the previous version (more maintainable, faster). Mainly it introduce an immutable "RouteMatcher" which encapsulate the way we store a loosely-defined collection of routes.

Also I now support route names with underscore in it (the client still have to "escape" them by replacing them by a space).

Also the correction of a potential bug in unpreferred route matching, I'd like to get a confirmation just to be sure, it seems a trivial copy-pasting error.

Any comments welcome.