Better change events

This essentially fixes https://github.com/Versal/iframe-launcher/issues/19 to the point that you don't get race conditions or duplicate events or such.