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.
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
hashmap: Fix the example using derived Hash + Eq

The example derived Hash + Eq on a type that was used as *values* for
a hashmap.. for the example to make sense, we have to use a custom *key*
type.

Write a slightly more involved example, still using Vikings, but this
time as key.

I preferred using String over &str here, since that's the typical usage
and we might want to lead users down that path.