Improve reduce and reduceRight perf

This uses recursion (which will be trampolined--no call stack
concerns), and is 2-3x faster than the previous version which used
Array.prototype.reduce.  The code is a lot uglier than it should be
due to having to deal with sparse arrays.  At least half the new code
is for sparse arrays :( Yet another reason to drop sparse array
support in 4.0.
Inline sparse array find first/last
Merge pull request #391 from cujojs/improve-reduce-perf

Improve reduce and reduceRight perf