Add EventfulList and EventfulDict trait types.

**Lots** of useful applications in Widgets.

The events are designed to catch all of the modifying methods of the list and dict objects.  The following methods exist to register handlers:

EventfulDict members:
- on_add
- on_del
- on_set

EventfulList members:
- on_insert
- on_del
- on_set
- on_reverse
- on_sort
Yes, and then you run into more problems - what if one callback has allowed it and already changed some state (such as a widget) in response to the event when another one cancels it? You'd have to have two callbacks - one to check if it's allowed, and another to notify that it's actually happening.

So I think it's fine to stick to one callback per event for now.