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.
the more idiomatic scalaz form for this would be to use `unsafeTap`:

    map { a <| f }