Yeah definitely. I'm really not sure what would be acceptable - arguably this fix is not important enough to warrant a performance hit?

The only alternative I came up with that didn't change `emit()` at all was registering two listeners in `once()`: the actual listener, and another 'cleanup' closure that removes the real listener and itself. However this introduces other problems because the 'cleanup' closure wont get removed if you use `removeListener()` on the real listener before the event is fired.

In yet another implementation I stored a boolean indicating whether the listener was recurring or once-off along with the callback in `$this->listeners` but that adds further overhead to `listeners()`, which is used by `emit()`.