Fixes #2496 (simple caching to speed up quickopen/go to definition)

Fix for #2496. This pull request is built on top of #2462 and #2548 and can't be merged until those are done with review.

This pull request does a few things:

1. creates a StringMatcher which does simple caching transparently, providing a match() method that wraps stringMatch
2. causes the three bundled QuickOpen plugins to cache their lists (go to definition in codemirror.js is much faster as a result of this)
3. eliminates the need for QuickOpen plugins to pull StringMatch functions from the QuickOpen module