The value based equatable wraps TValue in a tuple to prevent the MemberwiseEqualityComparer from diving into primitives.
Dictionaries are now also supported.
Embedded value types are now converted to object before calling GetHashCode(). This was failing with "method not found" before.
Obsolete TODO removed.
Static type check added, which ensures that TSelf is a subclass of MemberwiseEquatable<TSelf>.
Class contraint on MemberwiseEquatable removed.