add possibility to define ExternalListener
Massaging the change.

The listener better be abstract class to allow us to add more callbacks.
We should support multiple listeners.
Added the close callback for symmetry.
Call to listeners should be after we process the event since listeners aren't fully trusted to get things right.
Renamed the class since from users' perspective it is not external.
Added help screen