Use last needle to skip over definite non-matches
Use last needle to skip over definite non-matches

Idea from Hanson Wang and implemented in fuzzy-native here (thanks for
the heads-up, @hansonw):

https://github.com/facebooknuclide/nuclide-prebuilt-libs/commit/6a03044137fa4

The basic notion is that if the search string is an extension of the
previous search string (ie. if you just searched for "foo" and then
typed an additional "b" to search for "foob"), then we can skip over all
the items that didn't match "foo", because they won't match "foob"
either.

This delivers a nice speed-up for the common case of typing a
successively longer search query to narrow the result set:

Summary of cpu time and (wall-clock time):
                    best    avg      sd      +/-     p    (best)    (avg)      (sd)      +/-     p
     pathological 1.05000 1.11600 0.07338  [+0.0%]      (1.04406) (1.11903) (0.07496)  [+0.1%]
        command-t 0.75000 0.84600 0.08958 [-15.4%] 0.05 (0.76016) (0.84675) (0.08892) [-15.5%] 0.05
chromium (subset) 3.10000 3.17200 0.03816 [-20.9%] 0.05 (0.58766) (0.60345) (0.02392) [-20.7%] 0.05
 chromium (whole) 3.80000 3.87800 0.06645 [-60.7%] 0.05 (0.53332) (0.54951) (0.01307) [-56.9%] 0.05
       big (400k) 5.63000 5.78000 0.12570 [-56.9%] 0.05 (0.78037) (0.83729) (0.04883) [-56.5%] 0.05

wincent/command-t,yrro/command-t,yrro/command-t,wincent/command-t,wincent/command-t