generalize unpack_datum! and unpack_result! macros.

(for use in forthcoming commits.)
eagerly-bind references to pass into by-value closures.
libsyntax: eagerly-bind references to pass into by-value closures.
libsyntax: manually copy lambda exprs to accommodate by-val upvars.
libsyntax Eagerly clone some data to accommodate by-value closures.
librustc Eagerly compute and bind some data to accommodate by-value closures.
librustc::metadata accommodate by-val closures in filesearch and loader.
librustc/libsyntax whitespace cleanup.
Make RScopes structs non-copyable.
librustc added `clone()` calls to placate new by-value closure changes.
Update some doc examples to accommodate new by-value upvar closures.
librustc: Copy or move upvars by value.

Closes #12831.

This breaks many closures (about 10%) that look like this:

    let mut sum = 0;
    f.map(|x| sum += x);

Instead, rewrite them like this:

    let mut sum = 0;
    {
        let sum_ptr = &mut sum;
        f.map(|x| *sum_ptr += x);
    }

Or, ideally, switch to RAII- or iterator-like patterns.

[breaking-change]
Update compile-fail tests for new by-value closure semantics.