Full implementation of scriptable events
Makes events more generic (multiple class types supported)