further work for contracts to use interfaces instead of abstract classes

Changes include:

- a new ProjectorInterface for the Projector abstract class
- CommandHandling and ReadModel scenarios to use interfaces rather than abstract classes
- EventSourcedAggregateRoot::initializeState typehints the `DomainEventStreamInterface` instead of `DomainEventStream`

This is a follow-up to PR #2