Some adjustments from the add a keyrelease PR

 Removing the types from listeners and instead introducing subclasses

* I think that objects with a type instance variable are a smell
  and should rather be proper subclasses. So that's what I did.
  And it removed an if. I bet Tom would be proud of me :-)
* Also removed the unused opts argument and some unused instance
  variables. They're just confusing.
* I kept the main class and the subclasses in one file since they
  add very little (or even nothing) to the main class

Request for feedback: @skade @davorb