[qa] parallelize tests suite rather than polling subprocesses
Summary:
Currently, the test suite runs several processes, and polls them repeatedly for completion while printing dots. This limits what kind of status updates can be provided to developers running the test suite.
This commit refactors the test runner to have several python threads which pass messages up to a status thread. This allows keeping track of which tests are running and reporting on that.
Additionally, this opens up the ability to directly import test files in the future while running them in parallel. That will enable printing detailed messages about which subtests are running rather than being per file.
Output now looks like the following:
bip68-112-113-p2p.py started rpcbind_test.py skipped abandonconflict.py started Running jobs: bip68-112-113-p2p.py, p2p-compactblocks.py, abandonconflict.py, sendheaders.py abandonconflict.py passed, Duration: 12 s mempool_persist.py started
Note "Running jobs" rather than dots.
Test Plan: ./test/functional/test_runner.py
Reviewers: #bitcoin_abc, deadalnix
Reviewed By: #bitcoin_abc, deadalnix
Subscribers: deadalnix, teamcity
Differential Revision: https://reviews.bitcoinabc.org/D1400