Cache Types

- structs (based on their type and name; allow overriding of contents(!))
- plaintypes (based on base name and bitpacked size.)
- all user-requested types passed directly through ::new();
When printing nested types (struct/union/enum), do not recurse into already-printed types.
Add some constant basic types under $Type::TYPENAME.
Type->array([len]) returns a derived array type.
Types can now provide declaration strings.
Propagate Type usage throughout Syntel.
Functions can be Expressions evaluating to themselves.