Add cancellation support to util::Task.

The magic is coming together...