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.
Deprecate `DList::ListInsertion`
Merge branch 'master' into cfg_tmp_dir

Conflicts:
	src/etc/rustup.sh
Better temporary directory name
Prepared most `StrExt` pattern using methods for stabilization
Made iterator-returning methods return newtypes
Adjusted some docs to be forwards compatible with a generic pattern API
Split overly long line
auto merge of #20185 : csouth3/rust/dlist-deprecate, r=alexcrichton

This PR deprecates the `DList::ListInsertion` trait, in accordance with rust-lang/rfcs#509.  The functions which were previously part of the ListInsertion impl for `DList::IterMut` have been moved to be inherent methods on the iterator itself, and appropriate doctests have been added.
librustc: Traverse arbitrarily deep for nullable enum opt.
librustc: Try looking in tuple fields for nullable enum opt.
librustc: Try looking in fixed sized arrays for nullable enum opt.
Add tests.
librustc: Add NonZero lang item and use it if possible for nullable pointer enum opt.
libcore: Add NonZero lang item and implement some methods.
libcollections: Use NonZero in Vec.
liballoc: Use NonZero in Rc.
liballoc: Use NonZero in Arc.
libcore: Make it unsafe to create NonZero and impl Deref.
Add tests for NonZero.
Don't expose NonZero through libstd.