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. 
> benchmarks should be relatively deterministic anyway, so no point in re-running them again? 

That was my question: the samples will be different but their statistical properties should be the same.

>  the cleanest way, to me, is changing `throughputN`, etc. so they return `samples Lazy.t`

Well, maybe not.  If `( >: ) : string → samples Lazy.t → t`, then the laziness will take care of both the initialization and running (once only) the benchmark.  Or did I miss a use case?