Support for enum, simple and tuple type type constructors and some structural changes

I've added support for simple type constructors, like 'A of int', and tuple type constructors, like 'B of trae * int * trae'. I've made a few changes to the structure of the grammar rule functions as well; these might need some (major) restructuring, e.g. based on ML grammar rules.