Enhanced Tasks and Futures with some more combinator options (gatherUnordered combinator + runFor method on Task)

I am not completely sure if Nondeterminism[T] should act here as combinator or is just the way to run the tasks. I rather put the combinators on Task/Future object for now. 

If the Nondeterminism is just combinator, then I believe it should be replaced with non blocking code as suggested in this pull request. 

I also added convenience methods for running the Tasks with Timeout.