Build executables in parallel

This pull request implements building executables (which in Cabal are always independent of another) in parallel.

It first first refactors `JobControl` etc. and then implements the feature.

* Our earlier discussions about `JobControl`: https://github.com/nh2/cabal/commit/48890fe8f3224d62d650c4d12f8c7c33fd3cb0a1#commitcomment-3292665
* This started in the [Parallelise `cabal build`](https://github.com/haskell/cabal/issues/976) thread