Abstract event manager

sharing event manager API
If you follow Sutters well established coding standards member variables begin with _ , but that is more a old-school preference thing.