Avoid building as root with `sudo make install`

When running `sudo make install`, we only want to run the actual install
as root, the building of the documentation and the distribution folder
should happen as the non-root user.

Related to #13728.
Add help diagnostic messages

This adds ‘help’ diagnostic messages to rustc. This is used for anything that
provides help to the user, particularly the `--explain` messages that were
previously integrated into the relevant error message.
Add rustup.sh to the repo

Just to have it somewhere to point to. Updating it will not
automatically update the one on static.rust-lang.org.
Fix several issues with the struct and enum representability-checking logic.
Tweak copy and formatting of Tasks guide
improve clone_from_slice performance
Link to Unicode SpecialCasing.txt document
add intmax
bench: Improve the spectralnorm shootout benchmark

This improves the spectralnorm shootout benchmark through a few vectors after
looking at the leading C implementation:

* The simd-based f64x2 is now used to parallelize a few computations
* RWLock usage has been removed. A custom `parallel` function was added as a
  form of stack-based fork-join parallelism. I found that the contention on the
  locks was high as well as hindering other optimizations.

This does, however, introduce one `unsafe` block into the benchmarks, which
previously had none.

In terms of timings, the before and after numbers are:

```
$ time ./shootout-spectralnorm-before
./shootout-spectralnorm-before  2.07s user 0.71s system 324% cpu 0.857 total
$ time ./shootout-spectralnorm-before 5500
./shootout-spectralnorm-before 5500  11.88s user 1.13s system 459% cpu 2.830 total
$ time ./shootout-spectralnorm-after
./shootout-spectralnorm-after  0.58s user 0.01s system 280% cpu 0.210 tota
$ time ./shootout-spectralnorm-after 5500
./shootout-spectralnorm-after 5500  3.55s user 0.01s system 455% cpu 0.783 total
```
Improve the error message for missing else clauses in if expressions
Only consider impliciy unboxed closure impl if the obligation is
actually for `Fn`, `FnMut`, or `FnOnce`.

Fixes #18019
Change _rhs to _index.

Because var is provided as an index not a right hand side.
Remove unnecessary ::core::ops::

It shows error: failed to resolve. Maybe a missing `extern crate core`
anyway.
Change `from` and `to` to `_from` and `_to`

This to avoid warning: unused variable: `from`,
#[warn(unused_variable)] on by default.
improve shootout-reverse-complement.rs using unsafe code
Fix the formatting of the documentation for OrdIterator.min_max.
test: make the sort failure-safety test unsafeless and more obvious.

Previously it had some uninituitive conditionals due to the interaction
with the Rand construction and Clone reinitialisation to create
sequential identifying numbers. This replaces all that with just
constructing the DropCounters with the appropriate identifiers.
Switches from uint to u32 in BitV and BitVSet

Closes #16736
linked to #18009
Add tests for issues #11384 and #12909

Closes #11384
Closes #12909
auto merge of #18029 : Ms2ger/rust/patch-1, r=huonw