Dispose of some more code.
Add typedef `Both` to combine 2 types
 (like the Scala with keyword does)
Type safer TypeUtil.as(): Apply type constraint.


Haxe 3.0 unfortunately loses some type information
 that Haxe 2.11 didn't.

```
interface A {}
class B<T : A>{ var inner : T; }
```
In Haxe 2.11:
	something.as(B).inner
would be at least type `A`

In haxe 3.0:
	something.as(B).inner
gets typed as Unknown<0>.

This results in AVM2 not finding methods, as it is
treated by haxe as Dynamic/untyped.


With the new as() macro:
	something.as(B).inner
gets typed exactly as `A`, which is less flexible
 as the old behavior, but more correct.

```
class C<T>{ var inner : T; }
	something.as(C).inner
```
gets typed as Dynamic.