Add missing interface to implements.
Moved iterator interface from implementation to interface.
Add event publisher to the library.
Renamed commands to command to match the event structure.