The project bootstraps again, all the tests pass

Major refactoring.

The project does not bootstrap yet, but most of the pieces are there. The only missing part is including the .d files in the Makefile.

What's new:
- Fix #54: no more mutation, the graph of components is immutable
- Fix #52: unify compilation units
- Fix #50: generalize `Other
- cleaner interface for custom actions (to generate compilation units, libraries, binaries). With the new API, it's trivial to use an external ocamlbuild project.
- Fix #38: the computation of dependencies has been redesigned. That's not the only dynamic part of the system eg. all the components should be manually declared but the dependency between compilation units is computed automatically. There is now a clear distinction between the contents of a components and its dependencies.
- Fix #24: the link order is always specified manually
- the preprocessors are applied only once per file and the compile ast is later used by the different compilers.
- the compilation rules are now generic enough to be part of as_project. This makes as_makefile very simple and will help to port to other backend later
- more file types, more compilation phases