Streamline default EqualityComparer and Comparer for Enums (#21604)
This borrows the implementation strategy for these from CoreRT. It makes it both simpler (fewer types and lines of code) and faster in some cases since we always use the exact right underlying type.
E.g. The following micro-benchmark is 25% faster with this change:
```
enum MyEnum : byte { x, y };
var comparer = Comparer<MyEnum>.Default;
for (int i = 0; i <
100000000; i++)
{
comparer.Compare(MyEnum.x, MyEnum.y);
comparer.Compare(MyEnum.y, MyEnum.x);
}
```