Implement new event listener structure using MXEventListener.

This replaces the plethora of callbacks that existed previously,
and greatly simplifies MXData to just be gluing together the
interfaces IMXEventListener and IMXStore.