Implementing and re-utilizing an abstract aggregate listener

As of zendframework/zf2#3874, I abstracted the duplicate logic of the aggregate listener into an abstract class. This PR introduces minor BCs that should be discussed first:

 1. return value of `attach` (now `void`)
 2. return value of `detach` (now `void`)
 3. rename of protected property to `listeners` to `callbacks` (maybe `callbackHandlers`? let me know...)
 4. `Zend\Cache\Storage\Plugin\AbstractPlugin` now inheriting an additional abstract method (this breaks eventual plugins extending it)
 5. aggregate listeners in `Zend\Cache` don't throw exceptions anymore if the listener is attached multiple times
 6. aggregate listeners in `Zend\Cache` don't throw exceptions anymore if the listener is detached and was never attached

Ping @marc-mabe