[EventDispatcher] Add Drupal EventDispatcher

| Q             | A
| ------------- | ---
| Bug fix?      | no
| New feature?  | yes
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | ?
| Fixed tickets | #12007 
| License       | MIT (relicensing to be approved by three contributors)
| Doc PR        | -

Drupal forked the `EventDispatcher` for performance reasons a while ago because the construction of the event dispatcher service turned out to be an order of magnitude faster when listeners are injected into the constructor instead of adding them one-by-one with method calls (see [Drupal issue 1972300](https://www.drupal.org/node/1972300)).

This PR contains that version with Symfony coding-standards applied and short-array syntax removed. Obviously the class name hardly should be `DrupalEventDispatcher` but I cannot figure out a good name atm. Let's first see whether Symfony is willing to adopt it.
the empty array initialization should be done in the property definition itself according to our CS