Add back stub documentation for the traits.protocols package for the benefit of readers of existing code that uses traits.protocols.
Make sure that the weak reference the the listener is always defined.

Avoid an attribute error from
`getattr( obj_weak_ref(), self.name )`
in case the listener object disappears during the notification process.
Traits exception handlers need to be able to re-raise exceptions in Py3.

The call to `handle_exception` needs to be made in the `except` block, in
case the handler wanted to re-raise the exception. Re-raising worked
in Python 2 but failed in Python 3.
Add extra `gc.collect()`.

Without this extra call to `gc.collect`, running the test fails sometimes
depending on the order in which the tests are called. The failure says
that there is one object *less* at the end of the test than at the
beginning. Clearly, there are object that had not been collected.
Remove unused import.
Use already-resolved reference to the object holding the listener.
Improve test for garbage collection of trait class with listeners.

I used to rely on the length of `gc.get_objects()` as the invariant for
number of objects before/after the trait class instance is created and
destroyed. That turns out to be unreliable (the internal state of the
interpreter can influence that).

Instead, we're using a weak reference callback to listen to the object
dying.
Correct spelling error.
Merge pull request #91 from enthought/cleanup-traits-notification-refactor

Cleanup traits notification refactor
Merge pull request #90 from enthought/document-traits-protocols

Add back stub documentation for the traits.protocols package
Merge remote-tracking branch 'origin/master' into release/4.4.0