speed up tests by using a precompiled test runner (#1605)

Adds a new `precompileTestExecutable` method which you must call before calling `runTest`. It should be invoked in a top level `setUpAll` method, and will clean up its output in `tearDownAll`.

This should significantly speed up tests using `runTest` more than once.
41 files changed