Any mapped field can now have a public type and an implementation type.

Now any mapped field can be configured to use a type different than the actually declared type as the entity. The only limitation is that the implementation type is subtype of the declared type. That way mapped fields can be an interface or a superclass of the entity type.

The @Mapped annotation now offers a implementationType field that let's you set the type OM will instantiate. This new field supersedes and replaces the implementationType field from the @Collection interface.
Better error reporting for mapping extractor