Resolve issue with event propagation

- Better testing for event propagation issue
  - In the case of the route event returning early, a response was
    always returned by run(). Updated to use a data provider, and
    first test the route event, and then test with all other events.
- Solution was best implemented in the EventManager by setting the
  propagation flag prior to executing triggerListeners().
Merge branch 'hotfix/4147' into develop

Forward port #4147