Rewrote the whole event system

Now it properly uses member function pointers for maximum convenience