Abstract event manager

sharing event manager API
I really don't see a reason to inline the functions, maybe it's me.