graduated tutorial
    .then and .fail
        .then errback follows rejection of the promise, not rejection of the callback
    Q.call
    return or .end
    .all([]) .spread

    .defer
        .resolve


reduce implementation fix for sparse arrays
documentation of spread, node, ncall, deferred.node(), delay, timeout
map, filter, reduce, serial, parallel

    return Q.wrap(function (deferred) {
        return setTimeout(deferred.resolve, 1000);
    })

    return Q.wrap(function (deferred) {
        return FS.readFile('foo.txt', deferred.node());
    })

    return Q.stream(function (next, end, error) {
        var stream = FS.createReadStream("foo.txt")
        stream.on("data", next);
        stream.on("error", error);
        stream.on("end", end);
    });

Q.serial(
    Q.node(FS.readFile, FS, "foo.txt"),
    Q.node(FS.stat, FS, "foo.txt")
)
.spread(function (content, stat) {
})
.end()

