Simplify the grammar for TypeSpec.

Remove GenericTypeName and ArrayTypeName and optimise the grammar
of TypeSpec, by making the part after TypeName optional, in order
to remove unnecessary backtracking.
Add new test cases and fix the grammars for CatchClause and
CatchTypeList.