collect tuple element types in a list; added paren AST node

While other expressions (eg arithmetic) have binary ops that are right
or left associative and use parentheses for grouping which becomes
implicit in the resulting AST, type expressions with tuples are
special. The following are equivalent if `+` is left associative:

1 + 2 + 3
(1 + 2) + 3

But the following are not equivalent (maybe in a type theoretic way?
but not in a practical ML type system)

'a * 'b * 'c
('a * 'b) * 'c
'a * ('b * 'c)

Effectively, `*` (the infix tuple type ctor) is neither right nor left
associative?

Arrow, `->`, is right associative, ie these are equiv:

'a -> 'b -> 'c
'a -> ('b -> 'c)