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.
Au lieu de

~~~
if blabla then
  plen de code compliqué
else
   return stuff
end
~~~

il est plus joli d'ecrire

~~~
if not blabla then return stuff

le reste du code avec un niveau d'indentation de moins
~~~