Introduce traverse(), improve map() perf

There was a perf regression in map() in
889d8d2b99d982c9660fab662915ca14fcb1fdfa. This change not only fixes
the regression, but improves map() perf well beyond what it was
previously by using traverse(), which is an abstracted version of the
very fast all() algorithm.  Now, both all() and map() use traverse().
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 #390 from cujojs/improve-map-perf

Improve map() perf
Merge pull request #391 from cujojs/improve-reduce-perf

Improve reduce and reduceRight perf
Improve node.apply/call/lift perf. Reduce mem usage

There are now zero closures in makePromise, and zero on the hot path
of when/node apply/call/lift.  This improves the perf and reduces mem
usage of promise.fold, and when/node call/apply/lift.