Add support for segmented routes

Variables are denoted by a colon, followed by alpha-numeric characters.
- Optional variables are can be surrounded by brackets.
- A variable machtes alpha-numeric characters.
- Exampple: ':controller' matches 'someString'. The result is a RouteMatch object with param 'controller' = 'someString'.

Literals
- Every non-alpha-numeric character can be used as a literal.
- Alpha-numeric not in a variable are treated as literals.
- Literals are not part of the RouteMatch object.
- Example: 'ddd/' matches 'ddd/'. ':variable/' matches 'content/'. The RouteMatch object has 'variable' = 'content' set.

Chaining and stacking
- Variables and literals can be stacked or chained
- This applies to optional components as well
- Optional components can be skipped and later variables still be populated
- Example: ':variable[/:variable2][/variable3]/literal' would match
    - 'content/literal'
    - 'content/var2/literal'
    - 'content/var2/var3/literal'