fix Issue 10916 - toHash on VariantN not being recognised

Make VariantN.toHash() const nothrow @safe. Assume that `VariantN.type` property is @safe nothrow.
Remove redundant Tuple.opEquals

Today struct type equality `a == b` is expanded to `a.tupleof == b.tupleof`, so opEquals method is unnecessary for `std.tyoecons.Tuple`.
Merge pull request #2303 from 9rnsr/fix_hash

Tweak Tuple and Variant for correct hashing