This CL updates the parallel job library in the au test harness to be more robust.
Specifically, we migrate to using multiprocessing.Process rather than threading.Thread
which allows us to terminate pesky threads in the event a job takes too long. In
addition it allows us to remove some redundancy that was needed for threading.Thread.
I've also refactored the "waiting" code into the ParallelJob class and made it possible
to test with ctest --cache.
TEST=Ran ctest on x86-generic using new CL logic that lets me do so.