Changed the listener_ to be called with the abstract model interface.

This should make it safer for users to mess with the model in callbacks. Let me know if you want more tests.