cleaning up type creation
1. use memoizefunction to dedupe types rather than making a type string
2. remove places in typechecker that rely on global type names (replacing int with terra.types.int)
   users can now reassign to int without breaking the typechecker
adding __typename metamethod which is can be used to determined how a struct type is printed.
fix tovalididentifier to catch "" as string.