[Refactoring] Add hasIdentityOpEquals
[Refactoring] Improve __xopEquals implementation

`ref` parameter is same as a pointer in assembler level, so
storing function pointer of `bool __xopEquals(ref const S, ref const S)` to `bool function(const void*, const void*)` is valid.
Improve hasIdentityOpEquals and fix test result of issue 9694.

TypeInfo.equals should throw an Error if the struct doesn't have const objects equality. For example when the struct has only mutable objects equality.
fix Issue 3789 - Structs members that require non-bitwise comparison not correctly compared
fix Issue 10037 - Compiler should not generate opEquals method implicitly