Finalizing Nit objects on garbage collection

Rules for finalizable objects:

* They must be a standard Nit class (not an extern, nor a universal).
* They must not have any cycles, or else they won't be finalized.
* In practice, they should be used on small Nit objects acting as a thin layer around a resource. In other words, it is to be used in the Nity layer.
* `finalize` may be invoked more than once, and the underlying resources may also be used by other instances. This must be considered when implementing `finalize`.
* The finalizer will be called on garbage collection. It can be forced with `sys.force_garbage_collection`.
* When attempting to aquire a limited resource (for example, a file description) if you hit the limit, it is a good practice to force the garbage collection and try again.

----

Ça ne passera pas le bootstrap... Une fonction de gc_chooser.c fait appel à `gc_finalize` que est généré par le compilateur. Quelqu'un à une idée comment contourner ça? Si je génère le tout je n'ai pas accès à la macro WITH_LIBGC.

Je songe remplacer le `is abstract` de Finalizable par un corps vide pour éviter les surprises d'appel à une méthode abstraite par le GC.

Je vais aussi regarder pour l'appliquer sur certaines classes communes.
Malheureusement, le ANew c'est pas le bon endroit.
Tu peux factoriser le code dans abstractcompiler en faisant un méthode que tu invoques aux bons endroits dans les moteurs, le NEW_* est une bonne place car c'est deja lui qui fait le nit_alloc. Donc c'est plus simple d'avoir les deux pas loin l'un de l'atre.