whitespace cleanup
rustup: make rustup executable
rustup: probe for the existance of tar
rustup: add a RUST_ prefix to the rust-specific variables
rustup: rename TMP_DIR to CFG_TMP_DIR
rustup: factor out the install flags into a CFG_INSTALL_FLAGS variable
rustup: factor out downloading and extracting the snapshot tarballs
rustup: factor out installing packages into a function
rustup: rewrite to protect against truncation

This closes #19168. It's possible that if the downloading of `rustup.sh`
is interrupted, bad things could happen, such as running a naked
"rm -rf /" instead of "rm -rf /path/to/tmpdir". This wraps rustup.sh's
functionality in a function that gets called at the last time that should
protect us from these truncation errors.
rustup: extract the tarballs as part of installation
rustup: simplify downloading packages
Make the parser’s ‘expected <foo>, found <bar>’ errors more accurate

As an example of what this changes, the following code:

    let x: [int ..4];

Currently spits out ‘expected `]`, found `..`’. However, a comma would also be
valid there, as would a number of other tokens. This change adjusts the parser
to produce more accurate errors, so that that example now produces ‘expected one
of `(`, `+`, `,`, `::`, or `]`, found `..`’.
auto merge of #19170 : erickt/rust/rustup, r=erickt

This closes #19168.

Please be careful reviewing this since this gets used all over the place. I've tested all the options and everything appears to be working though.
Some small copy edits to the guide.

Fixes #19335.
Tasks aren't actually lightweight :frown:

Fixes #19402.
Add capacity() to VecMap

Changed capacity() tag to unstable and fixed doc assert
Add ability to configure recursion limit.

Fixes #19318.
Kill dead code
Stop masking overflow and propagate it out more aggressively; also improve error reporting to suggest to user how to fix.
rollup merge of #19303: nodakai/libsyntax-reject-dirs

On *BSD systems, we can `open(2)` a directory and directly `read(2)` from it due to an old tradition.  We should avoid doing so by explicitly calling `fstat(2)` to check the type of the opened file.

Opening a directory as a module file can't always be avoided.  Even when there's no "path" attribute trick involved, there can always be a *directory* named `my_module.rs`.

Incidentally, remove unnecessary mutability of `&self` from `io::fs::File::stat()`.