Update compiletest driver for new by-value closure semantics.
by-value upvars: Switch rustc from calls to `time(..)` to an RAII Timer struct.
Switch rustc from calling `with_c_str(..)` to using RAII CStr via `to_c_str()`.
PARTIAL eagerly-bind references to pass into by-value closures.
PREREQ for prebind mods: generalize unpack_datum! and unpack_result! macros.
PARTIAL eagerly-bind references to pass into by-value closures.
PARTIAL eagerly-bind references to pass into by-value closures.
PARTIAL eagerly-bind references to pass into by-value closures.
libsyntax: PARTIAL eagerly-bind references to pass into by-value closures.
libsyntax PARTIAL manually copy lambda exprs to accommodate by-val upvars.
libsyntax Eagerly clone some data to accommodate by-value closures.
libsyntax: PARTIAL eagerly-bind references to pass into by-value closures.
libsyntax whitespace cleanup / adjustment.
librustc Eagerly compute and bind some data to accommodate by-value closures.
librustc whitespace cleanup / adjustment.
librustc::metadata accommodate by-val closures in filesearch and loader.
Make RScopes structs non-copyable.
librustc PARTIAL added `clone()` to placate new by-value closure changes.
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.