Dry tests
Support event object with additional options

- matchers: emit to matchers, default=true
- listeners: emit to listeners, default=true
Refactor `listeners` to receive the same opts as `emit`