Changes required to remove entity typeloader

Summary of changes

1. Introduced "ExtendedType" and "ExtendedProperty" annotations in order to simulate the addition of specialized interfaces to Java types and properties. This is to support entity types and properties still being instances of IEntityType and IEntityPropertyInfo at runtime. In order for this to work, had to change casts to JavaType to IJavaType, and JavaPropertyInfo to IJavaPropertyInfo. (Paul)
2. A change to how enhancements are processed, in order to handle entity enhancements correctly (Dumitru?)
3. Re-factoring of IEntityAccess/ILanguageLevel. Should be no behavior change. (Dumitru)
4. Factored out IEnumData interface from IEnumType, so that typekeys could continue to behave like enums in certain cases, like webservices. (Paul)
5. Fixed a bug with structural types and inner interfaces. (Ivan)
6. Miscellaneous IJ plugin fixes.