Fix issue #13354 - Use a generic Variant for passing opIndex/opIndexAssign arguments.

Also improves the error message when an incompatible index or value type is used by printing the actual type ID instead of `void[]` in the thrown exception.

Note that this removes the `allowed!T` checks that have a comment on them, stating that they fix some kind of unspecified bug. However, removing that restriction is the reason for this pull request in the first place and all tests still pass as they should.

https://issues.dlang.org/show_bug.cgi?id=13354
https://issues.dlang.org/show_bug.cgi?id=7449