Targeting the Java Virtual Machine with Genericity, Multiple Inheritance, Assertions and Expanded Types