Polymorphic extern classes

The changes in the compiles ensure that extern classes (or sub classes of Pointer) are always boxed when in the generated code. This means that we now have 2 levels of boxing, the boxing within Nit and the unboxing for user C code where extern classes are pointers (FFI and legacy NI).

This change will allow to use extern classes in virtual types and generic types. It will be used by the android::ui modules.

The change also detected some wrongful use of the FFI which have been corected.

There's a bug weird on my computer on the test of nitcc, hopefully pratchett will do better.
Ce serait à mettre dans la spec que NativeString est une fausse classe externe... Si ça reste comme ça.