Tweak Tuple and Variant for correct hashing

1. Mark `VariantN.toHash()` with `const nothrow @safe` (fixes [issue 10916](https://issues.dlang.org/show_bug.cgi?id=10916)).
2. Remove redundant `opEquals` method from `Tuple`, then relying on `TypeInfo.equals` and `getHash` functions when it's used on AA keys.