Improve event handling

Events can now be removed using the action returned when adding them.
Also we now use AlwaysRetain in ghcjs and release when the remove event
action is called.