Abstract event manager

sharing event manager API
Shared ptrs would be nice.