Allow the dispatcher to be freed once a request is finished.
Previously, if there was no ref to the dispatcher, it would be freed
before the request could be satisfied. By keeping a ref in the
DispatcherRequestData, it is freed at the right time. This also
disconnects the signal handler from all channels and connections
when freeing the dispatcher as the "invalidated" signal callback can be
called after the dispatcher has been freed.