[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

Additionally fix interpret3.d tests, because class object equality is currently not yet supported in CTFE.
fix Issue 10037 - Compiler should not generate opEquals method implicitly
Merge pull request #1972 from 9rnsr/fix3789

Issue 3789 and 10037 - [TDPL] Structs members that require non-bitwise comparison not correctly compared
fix issue 9768 - No line number for wrong foreach type
Merge pull request #1974 from hpohl/9768

9768 - No line number for wrong foreach type
fix Issue 10043 - ICE with __traits(compiles)
Merge pull request #1977 from 9rnsr/fix10043

[REG2.063a] Issue 10043 - ICE with __traits(compiles)