The Equals method of the `SemanticComparer<T>` is similar to an AND Composite chained with two OR Composites:

The `1st` part (OR Composite) is applied to a sequence of comparer(s) for fields.
The `2nd` part (OR Composite) is applied to a sequence of comparer(s) for properties.

Both parts must return `true` (AND Composite) to indicate equality.

Do we always want it to work that way? If yes, then the `IMemberComparer` interface might be good enough and we probably wouldn't need a Specification.