Prepare the future analyzer
With the experience of a first version, the time has come to build a more resilient code analyzer that would welcome new features along the way.
Most notably, the analyzer now uses the parser instead of custom wrappers, and creates an output that is more pleasant for the compiler. IO types may still be used outside a regular file system. The compiler is still the sole component in charge of memory layouts.
Not all tests pass, especially those that heavily relies on custom behavior, such as implicit type conversions, std command aliases and structures. Various parts may be re-arranged if something better fit the purpose, especially for import directive handlers, methods and intrinsics.
The database of the analyzer is global to all reefs and shares globally some values such as types and schemas. It rethinks everything around different vectors spilled in order to avoid fighting the borrow checker by partitioning mutable accesses. TypeRef is removed thanks to the global vector indexed by TypeIds.