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.
default to 1 parallel dependency
Do not start a task twice when runnning concurrent tasks

A started boolean was added to the task to indicate when a task has been
sterted. This is checked before a task is invoked.
Cleanup and tests added

Used a three state variable to indicate the task status. Should be one
of UNSTARTED/RUNNING/DONE currently encoded as strings. Maybe a declared
constant variable s preferred, but I'm unsure where to put it
(we need access in both task.js and file_task.js)
More cleanup

taskstatus camelCased to taskStatus. The status values are now in a static object
on Task. I tried TaskBase, but was unable to access the variable in the
FileTask.
renamed concurrentLimit to parallelLimit
Rename from concurrent to parallel
added documentation section about parallel prerequisites
Update overview.md

Fix formatting
Merge pull request #264 from NKI-GCF/master

Parallel prerequisites Comments please