Address review comments.
Accept SparkListenerBus instead of more specific subclasses.
Add tests.