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