lib: split the library into many ML(I) files

This is a huge commit, there are no semantic differences, but types are
more precise and some documentations has been added.
Execution_engine: make `Do_make` jobs work

As explained in the comments, this makes them work but there is much
room for optimization, since the actions related to a `make` job are
started by batches, and every time we wait for all the actions to finish
before starting the next batch. At least it seems to work.
test: add a 2-chain `Do_make` job

The job creates a file (target 1) and then copies it (final target
depending on target 1).
test: fix the name of a make job
Execution_engine.to_string: add ?item_format

This a basic user-provided format string to display the jobs.
Command,Command_line: add `--item-format` option
test: use `--item-format` for final display