function nextValue(index, max, src, push, next) {
        src.pull(function (err, x) {
            if (err) {
                push(err);
                nextValue(index, max, src, push, next);
            }
            else if (x === _.nil) {
                if (!finished) {
                    finished = true;
                    push(null, nil);
                }
            }
            else {
                returned++;
                z[index] = x;
                if (returned === max) {
                    push(null, z);
                    next();
                }
            }
        });
    }
Takes a *finite* stream of streams and returns a stream where the first
element from each separate stream is combined into a single data event,
followed by the second elements of each stream and so on until the shortest
input stream is exhausted.

@id zipAll
@section Higher-order Streams
@name Stream.zipAll()
@api public

_([
    _([1, 2, 3]),
    _([4, 5, 6]),
    _([7, 8, 9]),
    _([10, 11, 12])
]).zipAll()
// => [1, 4, 7, 10], [2, 5, 8, 11], [3, 6, 9, 12]

// shortest stream determines length of output stream
_([
    _([1, 2, 3, 4]),
    _([5, 6, 7, 8]),
    _([9, 10, 11, 12]),
    _([13, 14])
]).zipAll()
// => [1, 5, 9, 13], [2, 6, 10, 14]