Tokenize queries and do fuzzy matching

See tests for some examples of how this works. The gist is that typing `q` will offer `sample:GQ` as a completion. After much experimenting, I found that doing fuzzy match on the last token and exact match on the others worked pretty well.

Lots of changes here, but I think overall this results in clearer code (hopefully!).

The `mocha-clean` dep cleans up long mocha stack traces.

Fixes #240 
This doesn't matter for getting this PR in, not a big deal, but it's not something we do elsewhere and it's not something that needs to be clear while reading through the code IMO—I don't know why you'd be worried that someone might suspect you'd be exporting this function. In languages which support module encapsulation, like JS with require(…), it's just unnecessary.