Add support for routes with regular expressions

This pull request adds support for advanced routes, such as:

```javascript
// Route:
'/test/:x1(foo|bar)/:x2/:x3([0-9]+)?'

// Good:
{ x1: 'foo', x2: 'bar' }          // -> /test/foo/bar
{ x1: 'foo', x2: 'bar', x3: 123 } // -> /test/foo/bar/123

// Bad:
{ x1: 'xxx', x2: 'bar', x3: 123 } // Invalid value for "x1", should match "(foo|bar)".
{ x1: 'foo', x2: 'bar', x3: 'a' } // Invalid value for "x3", should match "([0-9]+)".
```

Tests included, with all crucial things covered. :beers: