add populated search box to docs 404 page

reference https://github.com/rust-lang/rust/issues/18498
Merge remote-tracking branch 'upstream/master' into doc-18498
cleaned up ids, added direct rust doc search

Search functionality uses both duckduckgo for site wide doc search
and the rust specific documentation search @

http://doc.rust-lang.org/core/?search=unwrap_or_else
Fix decoding of unboxed closure kinds

Closes #18378.  Note that cross-crate unboxed closures are
still unimplemented and will fail to work currently.
Treat cross-crate unboxed closure def IDs consistently

Always translate the ID into the local crate ID space since
presently the only way to encounter an unboxed closure type
from another crate is to inline once of its functions.

This may need to change if abstract return types are added.

Closes #18543
Add regression test for #16790, #18378 and #18543
Add tests for E-needstest issues
rustc: Set the exceeding_bitshifts lint to Allow

There's currently a bug in it which fires erroneously on cross compiles,
preventing new nightlies from being generated. This can be reset back to Deny
once it's been fixed.

cc #18587
rustc: Default to static linking dylibs

If a dylib is being produced, the compiler will now first check to see if it can
be created entirely statically before falling back to dynamic dependencies. This
behavior can be overridden with `-C prefer-dynamic`.

Due to the alteration in behavior, this is a breaking change. Any previous users
relying on dylibs implicitly maximizing dynamic dependencies should start
passing `-C prefer-dynamic` to compilations.

Closes #18499
[breaking-change]
auto merge of #18589 : alexcrichton/rust/issue-18587-warn, r=jakub-

There's currently a bug in it which fires erroneously on cross compiles,
preventing new nightlies from being generated. This can be reset back to Deny
once it's been fixed.

cc #18587
auto merge of #18132 : P1start/rust/more-help, r=jakub-

Closes #18126.

At the moment this mostly only changes notes that are particularly help-oriented or directly suggest the user to do something to help messages, and does not change messages that simply explain an error message further. If it is decided that those messages should also be help messages, I can add them to this PR, but for now I’m excluding them as I believe that changing those messages might leave very few places where notes would be appropriate.
auto merge of #18596 : alexcrichton/rust/rollup, r=alexcrichton

Let's see if we can clear out the queue entirely today!
Implement flexible target specification

Removes all target-specific knowledge from rustc. Some targets have changed
during this, but none of these should be very visible outside of
cross-compilation. The changes make our targets more consistent.

iX86-unknown-linux-gnu is now only available as i686-unknown-linux-gnu. We
used to accept any value of X greater than 1. i686 was released in 1995, and
should encompass the bare minimum of what Rust supports on x86 CPUs.

The only two windows targets are now i686-pc-windows-gnu and
x86_64-pc-windows-gnu.

The iOS target has been renamed from arm-apple-ios to arm-apple-darwin.

A complete list of the targets we accept now:

arm-apple-darwin
arm-linux-androideabi
arm-unknown-linux-gnueabi
arm-unknown-linux-gnueabihf

i686-apple-darwin
i686-pc-windows-gnu
i686-unknown-freebsd
i686-unknown-linux-gnu

mips-unknown-linux-gnu
mipsel-unknown-linux-gnu

x86_64-apple-darwin
x86_64-unknown-freebsd
x86_64-unknown-linux-gnu
x86_64-pc-windows-gnu

Closes #16093

[breaking-change]
Use -m32 on 32bit Linux
Same fix for mac32
Same fix for dragonfly
Don't use pie on Android
Update some new use of the old targ_cfg
Update for collections reform
auto merge of #16156 : cmr/rust/target-spec, r=alexcrichton

See commit message.