Fix adding/removing events on an unstamped context

If you add an event listener with a context with no stamp, then stamp the context and try remove the event listener we fail to do so as we assume that we need to use the stamped array, which hasn't been set yet.

I've changed this to always stamp the context (if there is one), so we either go the stamped way, or the no context way.

Not sure why we weren't always just stamping the context before, so please have a check over @mourner @jfgirard thanks :-)

Fixes #1495, Fixes #1512
Refs #1141