rename serialEach/Map to asyncEach/Map, and add nextTick.js
just keep track of whether we've seen an error, not the error itself
implement parallel(fn1, fn2, fn3, function finish(err, fn1res, fn2res, fn3res) { ... })