Fixing up IDENT types (typedef'd names)

The old separation of token streams using the set of type tokens was
not working on names that are typedef'd. For declarations we can use
the fact that the IDENTs for symbol names are wrapped inside DECLs
that represent each dtor in the declaration. This means that any
top-level IDENT tokens are type names.

Parameters do not work yet (there is no dtor equivalent so we probably
need to count the IDENTs in the stream).

Most of the array.c file now parses ok, although the parameter types
are not yet valid.