Changed TypeNode to interface

Also, started adding tests for named struct types (ignored for now)
Removed TypeNameTypeNode in favour of TypeName (as ITypeNode)
Updated named type tests (still ignored)
Changed StructType, ValueTypeNode and TypeNode to interfaces

To allow multiple inheritance on TypeName
Changed ReferenceType to interface
Parse type-name as struct-type in type declaration
Parse named nullable types as struct-type
Added named nullable value types (e.g. DateTime?)