Initial commit of simple CI code

I have all the bits needed for a simplified distributed CI, but it doesn't yet run the tests. I have a few more hours work to get everything running as expected, but I thought I should check in some code by now.
This feels like it will be problematic when receiving test results, which are probably going to be large relative to the other commands. I'm not sure how recv() behaves in this case, especially with a TCP stream where packets might be delayed due to retransmission, etc. Playing with a basic SocketServer test script makes me think that recv() reads until the receiving socket runs dry or the specified number of bytes has been read, but the test runner might still be sending additional data that hasn't arrived yet or is larger than the receive size.

Maybe the test runner's results command should look like:

results:commitid:output_length

followed by a newline, then the output? That way, the dispatcher could read the initial buffer, then continue reading until it's received the entire output.