Fix removal during dispatch

This fixes the case where a change listener is removed during dispatch.
All listeners that existed at the beginning of change dispatch except
those that have been since removed are notified, but any listeners added
after the dispatch began are ignored.

Alternative to #46
Merge pull request #48 from kriskowal/fix-removal-during-dispatch

Fix removal during dispatch
Improve remove change listener errors
Leave the thunks alone

Once an object has a property change get/set thunk, even if no one is
watching, leave it alone. Chances dictate that it will be needed again,
or the object will never be needed again. Either way, removing the thunk
is a waste of time.