[Routing] refactored route-matching strategies into separate classes

Extracts existing match-checks for routes into separate classes using the Strategy pattern. This will allow for runtime substitution of the default cascade of matching strategies. This is useful in cases where complex custom routing is desired, as an alternative to the expression-based [`condition`](http://symfony.com/doc/current/book/routing.html#completely-customized-route-matching-with-conditions) setting.

This is a modified version of https://github.com/yitznewton/symfony/pull/1 (which includes feedback from @cordoval)

| Q             | A
| ------------- | ---
| Bug fix?      | no
| New feature?  | no (refactoring to enable substitution of routing rules)
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | -
| License       | MIT
| Doc PR        | -