Optimize FieldwiseEquality
Optimize FieldwiseEquality

When the type is a primitive or has a custom == operator, use that to compare values.
These operators are generally the fastest.
Otherwise, if the type T has an instance method Equals(T obj), use that.
This instance method avoids a cast, and is commonly implemented due to IEquatable<>
only if all else fails use object.Equals; it's slower because it needs a cast and virtual method lookup.

EamonNerbonne/ValueUtils,EamonNerbonne/ValueUtils,EamonNerbonne/ValueUtils