Never reuse a GCancellable to prevent a crash

It turns out we need to create a GCancellable for each async task, passing it
down to any async tasks in the chain.