Use mktemp for temporary download directory

Using the current directory may not always be appropriate, for example in
the case where it will unnecessarily trigger a backup to be made.

The only risk with this change is that systems might not have a mktemp.
I am not aware of such a system, but have not tested on Windows. It is
working on a basic Ubuntu and OS X installation.
Fall back to hard coded download directory

If mktemp fails, fall back to a hard coded directory, per @nodakai's feedback.
Implement `reserve_len` and `reserve_len_exact` for VecMap
debuginfo: Create debuginfo for for-loop variables again.
debuginfo: Clean the debuginfo module up a bit.
debuginfo: Add test case for destructured for-loop variable.
rustc: Add knowledge of separate lookup paths

This commit adds support for the compiler to distinguish between different forms
of lookup paths in the compiler itself. Issue #19767 has some background on this
topic, as well as some sample bugs which can occur if these lookup paths are not
separated.

This commits extends the existing command line flag `-L` with the same trailing
syntax as the `-l` flag. Each argument to `-L` can now have a trailing `:all`,
`:native`, `:crate`, or `:dependency`. This suffix indicates what form of lookup
path the compiler should add the argument to. The `dependency` lookup path is
used when looking up crate dependencies, the `crate` lookup path is used when
looking for immediate dependencies (`extern crate` statements), and the `native`
lookup path is used for probing for native libraries to insert into rlibs. Paths
with `all` are used for all of these purposes (the default).

The default compiler lookup path (the rustlib libdir) is by default added to all
of these paths. Additionally, the `RUST_PATH` lookup path is added to all of
these paths.

Closes #19767
Support all variants of WherePredicate

Adds support for all variants of ast::WherePredicate in clean/mod.rs. Fixes #20048, but will need modification when EqualityPredicates are fully implemented in #20041.
Update json.rs

Treemap should be BTreeMap
rustdoc: unmarked code fences are doctests too
Deprecate `DList::ListInsertion`
core: Removed a shadowed, unused definition of `debug_assert!`.
Address code review nits
Fix a typo
Merge branch 'master' into cfg_tmp_dir

Conflicts:
	src/etc/rustup.sh
Better temporary directory name
clean up `BinaryHeap` code
Rename to_ascii_{lower,upper} to to_ascii_{lower,upper}case, per #14401

[breaking-change]
doc: remove repeated info
doc: surround with symbols, like it should