How about to keep `removeSparkListener` `public`, same as `addSparkListener`, and make `postSparkListenerEvent` `private[spark]`?