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 
That's not the case, it's important that `j` isn't reset to zero on each iteration of the `for i` loop.

I pulled both vars out of the loops and added a comment clarifying that the strings are being searched simultaneously.