From a quick glance at your code, I believe you are using the hooks wrong. In particular, what's the purpose of:this.attachOnDestroy(&onSelfDestroy);?
It prevents InvalidMemoryOperationError when in different cases observer or observable not destroyed manually;
Also it is was implemented in such way because I can change a strategy of event emitting. Yes, may be it was written in completely wrong way.
Once again it was an experiment ;)