Allow runtime extension of Java types

This change introduces two new internal annotations, which can be used
to signal that a type (or property) should be extended at runtime by
a domain-specific interface. The use case is for entity and typelist
types, which have historically been instances of IEntityType and
ITypeList at runtime, but which otherwise would not be without the
entity typeloader.

If a type is annotated with ExtendedType, then, when constructing the
JavaType for that type, we consult the IEntityAccess to ask for a
factory to produce the extension data for that type. If something is
returned, then we wrap the JavaType in a proxy that implements both
IJavaType(Internal), as well as the additional interface indicated by
the factory.

The same is done for Java properties.

Because some Java types and properties are now proxied, we must be sure
to downcast to the interfaces IJavaType and IJavaPropertyInfo, rather
than the classes, JavaType and JavaPropertyInfo.
Fix generation of WSI WSDL with typekeys

Typekey types are no longer enums, but we want them to act like enums
for the purposes of WSI WSDL generation. To achieve this, allow for
custom MarshalInfo objects to be created per type. Register a custom
MarshalInfoFactory for all typekey types in PLXSDTypeProvider.

As part of this change, re-factored EnumMarshalInfo into a base class
with two subclasses: one for IEnumTypes that behaves as before, and
another for typekey types. Factored out an IEnumData interface that is
extended both by IEnumType and ITypeListTypeInternal (which is no longer
an IType), and that is used by the new EnumMarshalInfo base class to get
enum info.
PL-28959

Fix localized display names for entity types. Add a hook to
IEntityAccess to allow for overriding of the default behavior of
IType.getDisplayName() and ITypeInfo.getDisplayName().
Allow unqualified access to typekeys

Typekeys are no longer enums, but we still want them to have the
benefits of unqualified access. Change the parser so that it allows this
both for enum types and where the value type is an IEnumValue.
Backport fix for bridge methods from e8deca4
Merge branch 'remove-entity-typeloader' of github.com:pdalbora/gosu-lang into pdalbora-remove-entity-typeloader

Conflicts:
	gosu-core/src/main/java/gw/internal/gosu/ir/transform/GosuClassTransformer.java
Change versions to 1-entityMerged-SNAPSHOT / 3-entityMerged-SNAPSHOT
Fix command line build
Fix corner case in wildcards' quick-fix (GosuRemoveWildcardFix)
Handle Java type shadowing in the editor

When asking for the typeinfo for a Java type, it's possible that the
type we have is in a lower module than the current module. In the
editor, we always want the typeinfo for the current module.
Fix merge issues
Merge branch 'remove-entity-typeloader' of github.com:pdalbora/gosu-lang into pdalbora-remove-entity-typeloader
Fix array expansion for bytecode types

Make array expansion consistent with respect to null. Previously, when
the component type of the expression was a bytecode type, and the root
expression was null, the result of the expression was null. However, if
the component type of the expression was a non-bytecode type, then the
result of the expression was an empty array. Now, the result of the
expression is an empty array regardless of whether the component type is
a "bytecode" type or not.
Temporarily disable perf improvement related to IDimension
Merge branch 'remove-entity-typeloader' of github.com:pdalbora/gosu-lang into pdalbora-remove-entity-typeloader
Fix test due to array expansion's change (4d8c7f1111c)
Fix casting of extended Java types in bytecode

When building a cast expression where the type is a meta type, we use
the concrete class of the type the meta type is wrapping if the type is
a "bytecode" type; otherwise, we use gw.lang.reflect.IType. I'm not sure
why we do this, but it causes a problem when the type is an "extended"
Java type. The reason is that the concrete class of such types is based
on a Java proxy, whose name is not stable. So, the generated bytecode
won't work when re-loaded into a new JVM.

To fix this, introduce a new marker interface, ITypeImplementedByProxy.
Any type ref class based on a java.lang.reflect.Proxy will implement
this interface. Then, when deciding what type to use for cast
expressions, if the type is an instance of this new marker interface,
then just use gw.lang.reflect.IType.

Again, I'm not sure why we use the concrete class of the wrapped type
when it's a "bytecode" type. If we didn't do that at all, then this
wouldn't be necessary.
Merge branch 'spec' into master
Merge branch 'master' into pdalbora-remove-entity-typeloader

Conflicts:
	gosu-core/src/main/java/gw/internal/gosu/ir/transform/expression/TypeAsTransformer.java
Merge branch 'spec' into master