[EventDispatcher] Add an interface for the ContainerAwareEventDispatcher

| Q             | A
| ------------- | ---
| Bug fix?      | no
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | 
| License       | MIT
| Doc PR        | 

Currently if a class depends on the ContainerAwareEventDispatcher it's not possible to replace it by the TraceableEventDispatcher without rewriting the class.
to implement `addListenerService` and the other methods added by the "ContainerAware part" we need to access to the real dispatcher and there is only to way to do that:
1. Make it protected instead of private
2. Add a getters for the dispatcher.

And I think that to have a consistent api it's better to make it protected (also, the logger and the stopwatch object are protected and not private, considering that I don't think that it's more consistent to have the dispatcher procted as well).