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.
Fix lev_distance
Re-do the 30 minute intro

This was originally on my blog, so it's incredibly informal. Let's make
it better.
Fix type visitor glue for unboxed closures

This is a quick fix that prevents an ICE by mimicing the visitor
glue for boxed closures and bare functions.  Ideally, the `TyVisitor`
interface will be improved in the future to allow representing
more information about unboxed closures such as Fn/FnMut/FnOnce
status, capture mode, and captured free variable types and offsets.

Closes issue #17737
Add regression test for issue #17737
Handle provided trait methods when giving inference error suggestions

This fixes an ICE.  Closes issue #17758
Add regression test for issue #17758
Correctly generate drop glue for `Box<str>`

This fixes an ICE.  Closes issue #17734
Make examples for AtomicInt refer to AtomicInt

The examples for fetch_or, fetch_and and fetch_xor for
std::sync::atomic::AtomicInt used AtomicUint instead of AtomicInt.
Fix infinite recursion in Writer impl for &mut Writer

Closes issue #17767
Update LLVM.
docs: Reference hoedown instead of sundown
auto merge of #17760 : bkoropoff/rust/issue-17737, r=eddyb

This is a quick fix.  In the long term, the `TyVisitor` interface should be expanded to better represent closure types.

Closes issue #17737
Changed `extern crate foo as bar;` error message

Closes #17709
docs: Fix short hash link to github

The escaped newline in the middle of the variable reference breaks the
short hash substitution, leaving the link text exmpty; rewrap so that
each replacement is on its own line.
auto merge of #17738 : hoeppnertill/rust/master, r=alexcrichton

There is an issue with lev_distance, where
```
fn main() {
    println!("{}", "\x80".lev_distance("\x80"))
}
```
prints `2`.

This is due to using the byte length instead of the char length.
auto merge of #17761 : bkoropoff/rust/issue-17758, r=alexcrichton

This fixes an ICE and closes issue #17758
Rename vector patterns to array patterns

Closes #17765.
auto merge of #17766 : pminten/rust/atomic-int-in-examples, r=alexcrichton

The examples for fetch_or, fetch_and and fetch_xor for
std::sync::atomic::AtomicInt used AtomicUint instead of AtomicInt.