A class for asserting that 2 objects/collections are equal by comparing properties and fields of the
objects/collections using reflection.
The (combination of) comparator modes specify how strict the comparison must be:
ignore defaults: compare only arguments (and inner values) that have a non default value (eg null) as exepected value
lenient dates: do not compare actual date values, just that they both have a value or not
lenient order: order is not important when comparing collections or arrays
There are 2 versions of each method: a len and a ref verion.
With the ref versions you can set the comparator modes explicitly (note: no modes means strict comparisson).
Abstract superclass that defines a template for sub implementations that can compare objects of a certain kind.
Different instances of different subtypes will be chained to obtain a reflection comparator chain.