Improve support of scala types in routes

Now supports:

- Nested type parameters (#2402)
- Tuple types
- Type projection

Types are now parsed according to the following grammar:

    simpleType ::=  stableId (typeArgs)?
                 |  '(' types ')'
    typeArgs   ::=  '[' types ']' (typeArgs)?
                 |  '#' identifier (typeArgs)?
    types      ::=  simpleType (',' simpleType)*
    stableId   ::=  identifier ('.' identifier)*