Subscriptions: improve usage of Java generics

* Parametrize `Notification` with generic argument
* Use proper generic types instead of `<?>` wherever possible on
  `Subscription` and `Notification`
* Reduce the amount of (now unnecessary) casting
* Don't write `Subscription<? extends EventSource>`: the `EventType` is not
  exposed directly anywhere and there cannot exist any Subscription
  where the `EventType` does not extend `EventSource`, given the class
  signature of `Subscription`. Write `Subscription<?>` instead when the
  `EventType` is not known.
* Classes are of type `Class<? extends XXX>` where `XXX` is the non-generic
  superclass of `XXX<?>`. Hence there is no need to ever write
  `Class<? extends XXX<?>>`, and doing so requires unchecked casts all
  over the place.

The only change that does affect actual generated code (not only type level information) is the addition of `notifySubscriberByFCP()` to `Notification`: `Notification` knows its `Subscriber` is of the same type, even when we don't know the type of either the `Notification` or the `Subscriber` (e.g. when parametrized `<?>`).