runner: Better communication between tests and runner
Instead of using raw stdout/stderr streams for logging, use UNIX datagram sockets with a custom protocol. With that we can
- More easily parse the results into json, and keep track of the currently running (dynamic) subtest at runtime
- Serialize the test output, in the case of threads/forks
- Inject messages into the test output ("this test just caused a kernel taint at this time" etc), without having to care about only doing it after a newline character
- Introduce runner-controlling commands, like having the tests specify particular dmesg patterns to be (non-)problematic, for purposes of dmesg-warn