Changes for mutability safety and rustyness

This adds mutability information to allow for safer coding; implements the Clone trait for appropriate types; and adds an internal iterator for events.