Fix for deserialization issue with StringDiff.

If an instance of StringDiff is encountered by MongoDB deserialization
before a serialization step, then an unknown discriminator exception is
thrown. Therefore the BsonKnownTypes attribute is required to inform the
serializer of the existance of the inheriting types. Not really user
friendly, but it only has to be done for polymorphic event fields.

Maybe consider removing the polymorphic StringDiff reference alltogether
and use event versioning?
Off by one error fixed
Null check added
Split event and command processing into seperate services