Fix ctor of hashtable that excepts list of other tables
Adding task dependencies handles done dependencies

Before, adding a done observer to a task with the standard addDoneObserver()
method resulted in a dead lock if that task was already finished. Rather than
having a client check if a task is done before adding a dependency to it, this
is now encapsulated by the addDoneObserver() method.
Added Task successor/predecessor retrieval methods
Added Pipelining interfaces and examples
Performance data helper: Sorted operation durations