Fix for listenToOnce mem. leak

This is a failing test demonstrating #3226, then a patch that makes the test pass.
I'm thinking that this will need more thorough testing. I'm thinking this will break things when an event map is passed to `listenToOnce`.

When `listenToOnce` is passed an event map, the `callback` will be set to `this` via L241, which is what it needs to be for setting the context in `listenToOnce`. But we immediately override that on L246, which should be setting the context of the original callback as the modified callback – which clearly isn't what we're going for.

I loop through each callback in the event map case and modify them.