Refactor event base class. Add event subclasses. Add visitor pattern for event handling