Wait for concurrent jobs on error
This fixes #28 (closed)
Exiting immediately when one of the jobs fails can leave source and build directories in a bad state. For example interrupting the kernel link process leaves an empty file which causes build to fail on the next attempt. Killing git clone can leave index.lock files which causes an error on the next attempt.
When a process returns an error, mark the build as failed (by setting exec_error) and clear the queue but keep running until the concurrent processes complete.