Fix an ICE when trying to resolve a struct variant

Unlike a tuple variant constructor which can be called as a function, a
struct variant constructor is not a function, so cannot be called.

If the user tries to assign the constructor to a variable, an ICE
occurs, because there is no way to use it later. So we should stop the
constructor from being used like that.

A similar mechanism already exists for a normal struct, as it prohibits
a struct from being resolved. This commit does the same for a struct
variant.

This commit also includes some changes to the existing tests.

Fixes #19452.
Deprecate the `TupleN` traits
libunicode: use tuple indexing
libcollections: use tuple indexing
libstd: use tuple indexing
libregex: use tuple indexing
libsyntax: use tuple indexing
librustc: use tuple indexing
librustc_trans: use tuple indexing
librustdoc: use tuple indexing
libcoretest: use tuple indexing
libgraphviz: use tuple indexing
libcore: allow deprecated `valN` methods on doc tests
Get rid of all the remaining uses of `refN`/`valN`/`mutN`/`TupleN`
auto merge of #19677 : japaric/rust/deprecate-tupleN, r=alexcrichton

r? @alexcrichton or anyone else
closes #18006
Rewrite threading infrastructure, introducing `Thunk` to represent
boxed `FnOnce` closures.
Purge the hack that allows `FnOnce` to be used with a by-value self method.  Besides being yucky, it will cause problems if we try to make all traits implement themselves, which would make a lot of things in life easier. Also, it was inextricably linked to `Box`, which was not the intention.  We can work around its absence, so better to reimplement it later in a more thorough fashion.
Adjust feature gates to allow for parenthetical notation to be used
with the fn traits
Remove `proc` types/expressions from the parser, compiler, and
language. Recommend `move||` instead.
Patch rustdoc to include missing types, make the match exhaustive
to prevent such oversights in the future.