Add cancellation support to util::Task.

The magic is coming together...
Sorry - victim of code folding