added runAll() method to benchmark, and modified run() semantics
run will now just run the actual benchmarked code
in the case of a ThreadedBenchmark, run is therefore overridden as the
init/ready/set/go/finish methods actually define the benchmarked code
with sequential guarantees between their calls
this also implies that run() can be called at any time after class
creation, in the case of ThreadedBenchmark this means that threads are
spawned in its constructor. This will be changed as the extra threads
might influence benchmark results.