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
Using the current design, you can just listen to the add event, cancel the add, and then add an Eventfull* in it's place.

For an automated design, things are further complicated when you try to handle a list in a dict in a list, etc. because the event signatures for the EventfulDict are not the same as the signatures for the EventfulList.  We would have to make a decision if the events should bubble only for the top most Eventful item, or if they should contain some sort of pointer to the nested Eventful thing that originally triggered the change.

i.e.
c = EventfullDict()
b = EventfullList([c])
a = EventfullDict({'B': b})

change a key/value in c, do we raise an event in a?  If so, does it point to the key 'B' and value b being changed?  Or does it instead point to key/value in c as being changed?