Simple event interface, suitable for prototype mixin