Make SignalHook disconnect properly from the signal when a sender was specified in the constructor

The Signal.disconnect() method in Django uses a combination of the dispatch_uid
and the sender as the lookup key for finding the signal receiver to remove.
This means that if SignalHook used a sender in the connect() call, it must
provide that same sender when calling disconnect() later.

This issue was causing ReviewBoard extensions that should have been unloaded to
be kept alive and continue receiving signals, which in turn led to extension
actions happening multiple times.

Testing Done:
Added new unit test.

Reviewed at https://reviews.reviewboard.org/r/6410/