The container can mock node modules too

The initial goal was to avoid using the underlying filesystem for at
least some of the tests, and to gain more testability.  Using the
container for loading node modules too was helpful in this respect.  I
ended up mocking more stuff and having the tests more coupled to the
implementation, though, which I'm not sure is a good thing.

I initially thought of writing the tests mocking out the filesystem with
the mock-fs module, but it turns out it doesn't support watchFile().
Therefore I went with mocking the chokidar watcher itself, even though
this couples the tests with the implementation.  Another way the tests
became more coupled to the implementation is that I'm assuming
yamljs.load() is used for mocking the configuration.
Refactored runnerSpec to use a stub instead of actually running tests/helper.sh
Dropped chokidar (which uses polling even on Linux and eats my CPU); now we use `fs.watch()` directly