Parameterize all test modules by underlying transport.

All test modules now export exactly the same interface: a single
function 'tests' which takes a 'TestTransport' and returns a list of
tests.

A 'TestTransport' is a record wrapping a transport with a few extra
operations needed for the purposes of testing (currently only
'breakTestConnection', to simulate network failure).
Provide a runner for each test module, using TCP as a transport.

Each module is its own test suite. In order to avoid code duplication
for constructing the transport, we write a single runner, providing
the name of module to link against and run using CPP.

The alternative would have been to avoid use of CPP altogether, but at
the cost of only having one giant test suite that runs all tests in
all modules at once.
'testMain' no longer needed.