Allow mixed named params and splats in route captures

Allows route definitions with mixed token (param), splat and megasplats,
such as get '/some/:id/**/*' => sub {};.

To solve param/token/splat ordering, all (compiled) captures are now
tagged with regex comments (previously only splat and megasplat were
tagged with comments). These are extracted and values iterated over
so we can assign a captured value as a token or a splat.

Closes #742.