[REG2.066a] Issue 12255 - opCmp requirement for AAs breaks code

https://issues.dlang.org/show_bug.cgi?id=12255

AAs should require equality and hashing for key types.

This PR is based on #3710 to guarantee correct hashing of AA keys.
I noticed that this is *necessary*. With `+0.0` and `-0.0`, they have different bit representation, but they are equal. So, due to handle the case in default hash calculation, generating `__xtoHash` would be necessary.