Improve call stack usage in SequentialExecutor.callListeners()

Converts recursive loop to sequential one for synchronous listeners.