Robustify process handling

If something bad happens to a runner (e.g. PhantomJS segfaults for some reason), we don't want to hang in CI mode (because the CI server will probably take a while before it times out). This monitors the runner processes and will terminate gracefully if the test suite doesn't complete, even if the runners are all dead.

Possibly want to make the timeout (15 seconds) configurable?