Add cancellation support to util::Task.

The magic is coming together...
Can this ever not be empty if you've swapped in an empty one and set` cancelled_` under `lock_`?