Dispatching can be cancelled via preDispatchSignal().

Slots should have the signature `bool slot( dispatcher, nodes )`, and may return True to cancel execution, or False to allow it to continue.

Note that I've left reporting the cancellation to the user as a todo until we address #299. I can put an info message in there for now if you prefer.

Fixes #929.