Issue 3789 and 10037 - [TDPL] Structs members that require non-bitwise comparison not correctly compared

[Issue 3789](http://d.puremagic.com/issues/show_bug.cgi?id=3789) - [TDPL] Structs members that require non-bitwise comparison not correctly compared
[Issue 10037](http://d.puremagic.com/issues/show_bug.cgi?id=10037) - Compiler should not generate opEquals method implicitly
This is the revised pull request of #1731.

If `opEquals` method is not defined, compiler should translate struct objects equality operation `s1 == s2` to `s1.tupleof == s2.tupleof`, instead of the implicit generation of `opEquals`. The expansion would provide member-wise equality comparison recursively.