add a tree-like system to run sets of benchmarks

A system a bit similar to `OUnit`, with the ability to select only a subset of the benchmarks to run them. As each benchmark can take a significant time, it is convenient to be able to run only the ones that are relevant to some function, say, if we are trying to improve this function's performance.

There is also a small patch to `_oasis` because it wouldn't compile with a recent version of `oasis` otherwise. 
This operation still puzzles me.  Since the tree generated by the function `int → t` can contain their own (very different) paths, I think that there is no way but to evaluate them on the given `int list` (one needs to be able to select sub-trees in them too!).  The presence of a special node for them is odd.