Implement parallel recipe building
Steals some of the async changes from !170 (merged) so semi-depends/conflicts.
This makes everything build faster by 20-45% by consistently using multiple CPU cores to their full potential. The most notable time reduction is the ios-universal deps job of over an hour.
There are some limits in place to ensure the build will not overload a system.
- Only a single install or post-install step can execute concurrently. This is mostly for ios-universal to be able to track installed files correctly as it requires.
- Only 2 parallel build steps can execute concurrently. This reduces the number of processes that we will spawn and reduces resource contention
Edited by Matthew Waters