Use ProcessPoolExecutor instread of threading

Currently we use threading, and do thread.join() to start audit/repair
scripts. Using futures and executors makes the code simpler to read. Note
that it might not necessarily improve performance. I set the max number of
workers arbitrarily to 8, but we can work out a way to set this number
correctly.

Change-Id: I3c9f3194753c79d57204b49c7ec2444fd454bfc7