Add onComplete/onFailure/onSuccess to Future and Task interface

We needed a facility to add side-effecting functions to be run on completion of a Future or Task without actually running them. Since no method was available on Futures, we added an onComplete. Task has a onFinish, but the type signature is inadequate for us because you don't have access to the result in the case of success and also it requires returning a Task[Unit] as opposed to just Unit.

We think that onComplete/onSuccess/onFailure is more flexible and easy to use and should satisfy all cases where one would have previously used onFinish.