Abstract event manager

sharing event manager API
So I know that you're following the internal conventions here, but it would be nice if we were to inforce standard naming conventions outlined by Sutter etc.