change the way sort listeners get applied

Because of the order at which directives get executed, I can register
an event listener with the element with the initial load cycle, but not
the element with the root.  So now we are registering the listener with
the root when the element is about to trigger the action, then clean
them up after they are called.  That way, we only call the listeners
who are actively waiting for a call