Type synonym declarations

These permit the user to introduce a new name for  an  already  existing
type, e.g.
	string == [char]
type  synonyms  are  entirely transparent to the typechecker (it best to
think of them as being just macros). For obvious reasons, recursive type
synonyms are not permitted.

It  is also possible to introduce a synonym for a type forming operator,
by introducing generic type variable as parameters  of  the  definition,
e.g.
	invt * ** == (*->**)->(**->*)

So  within  a script containing the above two `==' definitions, the type
`invt num string' will be shorthand for
	(num->[char])->([char]->num)

