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 can create trees without a name.  May you explain why you want to do that — and how it interacts with the path selection.  If we keep this, it seems unwise to me to reject `name = ""` for the above operators.  Or is there really a difference between not having a name and having an empty name??