Cover `ExtendedTraitChangeNotifyWrapper`.

Much of the code is duplicated from `test_dynamic_notifiers.py`. However,
I considered having a single class and dynamically setting the `dispatch`
argument to `@on_trait_change`, and found that it appeared as if
`dispatch="extended"` was a legitimate setting of the dispatch parameter,
while in fact I was just relying on some implementation details.

I find that, in this case, the duplication makes the tests self-contained
and more explicit.
Test that objects with listeners can still be garbage collected.
The `dispatch='ui'` option has been broken since 2007, remove it.

Since 2007, the documentation has given the illusion that it would be
possible to queue a trait notification on the UI thread. In reality,
the functionality was broken and the notification always occurred
immediately on the UI thread. The "fast_ui" and "ui" traits dispatch
mechanism are thus equivalent. Remove the code that is not used.
Cover `NewTraitChangeNotifyWrapper` for tests.
Cover `FastUITraitChangeNotifyWrapper` with tests.
Add missing call to `gc.collect()` to test.
Rename 'n' to 'arg_count'.
Refactor TraitChangeNotifyWrapper and ExtendedTraitChangeNotifyWrapper.

Eliminate all the call_X and rebind_call_X nonsense.
Improve docstrings.
Clean up imports.