Allow to expose fields of the underlying type of an abstract with a different name.

This patch allows abstracts to expose fields of the underlying type with an alias. In addition to a regular definition like @:expose(push, unshift) it also allows a definition like @:expose(push => pushEnd, unshift => pushFront). It's also possible to mix both definition types like @:expose(push, unshift => pushFront).