[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 agree this is essentially unnecessary. If only floating point field exists in struct, we can use bitwise hashing. But by this *redundancy*, I can make the code in `TypeAArray::semantic` simple.

This PR is not trivial but necessary change, so I'd like to keep things simple as the first implementation.