Allow append() to work with any DomainEvents implementation

The initial implementation of append() made assumptions about the internal workings of the $other DomainEvents implementation. Although this would work for any $other DomainEventsArray it would fail pretty hard for any other implementation even if it used $events property internally.

Includes a test implementation of DomainEvents that only implements the iterator portions of DomainEvents. This should be enough to ensure that appending works as expected with an entirely different implementation of DomainEvents.