rewrite parallel run-tests

- use libdispatch instead of NSOperationQueues
- restructure the code such that everything runs in 1 queue
- use a semaphore to limit the number of concurrent processes

Primary motivation: reduce system load by limiting concurrent processes.
Secondary motivation: rewrite to be easier to understand

Results: Did not impact completion time of running all tests (for thousands of tests in tens of binaries). Reduced latency for each individual test, as seen in the following graph, showing percentage vs old, by sorting and matching tests of similar running-times.

![untitled](https://f.cloud.github.com/assets/240535/657326/77b5b57c-d54b-11e2-93eb-76853470168f.png)