refactor(watcher): Use gaze for FS watching

There are several issues surrounding file-watching (see #974), and it makes increasingly little sense to try to address all tricky edge cases within Karma, when there are existing libraries that tackle the "tough issues" for us.

This PR replaces chokidar with Gaze, which is a purpose-built globbing file watcher.  [Gaze](https://github.com/shama/gaze) has some of its own issues (particularly related to ST3), but largely seems to be more stable and reliable than Karma's old approach.  Gaze is fairly widely used, and notbaly provides the underlying functionality for [grunt-contrib-watch](https://github.com/gruntjs/grunt-contrib-watch).

Additionally, we now watch files according to their relative paths (rather than the absolute path that config.js computes for us).  This seems to prevent Gaze from inadvertently traversing filesystem boundaries (which hurts performance, and breaks the detection of new files).

Most unit tests in watcher.js were removed, because Gaze implements its own test suite, which doesn't need to be replicated here.  If there's any functionality that you think should be tested, please leave a comment.

When this PR is merged, it may make sense to start cleaning up file_list.js, and removing globbing hacks wherever we can, and delegate that functionality out to an external library.
This is a known issue with Gaze: https://github.com/shama/gaze/issues/109

As far as I can tell, Gaze will traverse the tree at least once before we unregister the listeners from that subtree.

In my own (very informal) testing, I didn't notice any perceptible performance issues, even when watching large source trees.

Gaze is actively maintained, and it wouldn't be a bad idea to contribute some code to optimize their file-exclusion process.