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.
I think it'd be better to pass this as an array of arguments, and *not* pass it through a shell. The shell parsing isn't necessary in this case, and it has security (command injection) and data transparency (directories with spaces) implications.

Same goes for repo_observer.poll().