First attempt at running parallel prerequisites

This modificition uses async to run the prerequisites of a task in
parallel. It can be configured by an extra option in the task:
	runparallel: <limit>
Obviously only asynchronous tasks benefit from this feature. It required
some refactoring of the invocationChain. The global complete function no
longer pops the last item, but the items are removed in the
task.complete function itself.

This changes the API because the global complete function only does the
right thing if the task is provided as an argument. For backwards
compatibility the last task on the chain is still removed when no task
is provided.

An example task that run prereqs in parallel:
task("all1", ["1.o", "2.o", "3.o", "4.o" ,"5.o", "6.o"],  {async: true,
  runparallel: 3}, function() {
    console.log("Compile done");
    complete(this);
    // or this.complete();
});

It works with both tasks and rules.