Right now, we are blindly overwriting ContractResolver with a new instance of EventContractResolver
Thus, if user specifies serialization settings, the ContractResolver piece of those settings are not being respected. This is problematic if the ContractResolver is doing something important (e.g. overriding CreateConstructorParameters to deal with constructors)
If the user specifies their own serialization settings, it's my belief that they should fully own the consequences (e.g. not serializing IPrincipal).
Extracting "rules" from EventContractResolver and OptionalContractResolver into callable methods enables users to incorporate these rules in their own contract resolver
fixes: https://github.com/jonsequitur/Its.Cqrs/issues/196