goaproviderdialog: fix deadlock with cancelled tasks
The task cancellable is watched so that the dialog can be closed if cancelled, but the cancellable was disconnected in its own handler resulting in a deadlock.
Check if the task has been cancelled before disconnecting and, if so,
defer disconnecting until dispose()
.
closes #379 (closed)