Here, we create the plugin architecture. A "module" has a list of functions (plugins) which will be composed (which means they are : 'a -> 'a).
The list is set at run-time.
There are two possibilities for a plugin to be part of such a list. It can be included in the main module at compile-time (a .cmx) or it can be compiled as a loadable module (a .cmxs).
It should be possible for any plugin to be available in both way (not at the same time of course). For example, a ./configure would determine whether to compile the plugin as a .cmx, as a .cmxs, or not to compile it at all.

Finally, all plugins should be instrumented. Profiling (gprof) is nice but too heavy. Timing the time a plugin takes in its globality will usually be enough and much lighter.
