Allow mixed named params and splats in route captures

Allow route definitions with mixed token (param), splat and megasplats, such as `get '/some/:id/**/*' => sub {}; `. 

To solve an ordering problem, all the captures are now tagged with regex comments (previously only splat and megasplat did so). These are extracted and values iterated over so we can assign a captured value as a token or a splat.

The existing `route.t` was moved into the new classes based test structure and extended for these mixed token/splat captures. A case for optional tokens was also added.