Implemented bracketed optional parameters

This allows one to create routes like

- `[/{language}]/pages[.{type}]` which will match `/pages` and `/en/pages` and `/en/pages.json`
- `posts/archive[/{year}][/{month}][/{day}]`

The `generate()` method makes sure that parameters that have the default value are not included. So, if the `language` default value is **en** the URL that will be generated will NOT start with **/en**