async.autoInject - dependency injection for async.auto

autoInject is designed to be an even tidier way of expressing task graphs, where dependencies are expressed as function parameters instead of array string elements.  It transforms something like this:

async.autoInject({
    a: function(callback) { ... },
    b: function(callback) { ... },
    c: function(callback, a, b) { /* use a and b */ }
}, function(err, a, c) {
    // use a and c
});

... into something like this:

async.auto({
    a: function(callback) { ... },
    b: function(callback) { ... },
    c: ['a', 'b', function(callback, results) { /* use results.a and results.b */ }
}, function(err, results) {
    // use results.a and results.c
});