librustc: Replace scope regions with SEME regions.

SEME is short for "single-entry/multiple-exit".

This patch contains no functional changes, because all intersection and
union operations on SEME regions convert SEME regions to scopes and use
the old scope-based intersection/union logic on those scopes. However,
this patch does take the full generality of SEME regions into account
when computing the gen/kill bits for the data flow analysis used in the
borrow check. Once the correct intersection and union operations land
(possibly using the dominator tree infrastructure), then non-lexical
borrows (issue #6393) will begin to work. Therefore, this patch
establishes most of the groundwork for non-lexical borrows.

Because this patch refactors the AST to index pattern arms (which is
necessary to make non-lexical borrows work in the data flow analysis for
common cases), it can break compiler plugins.

r? @nikomatsakis
f? @zwarich
This seems wrong. If you have a loop in a condition, it is nonetheless a child of the outer loop, as far as I can tell:

    while ({ while some_other_cond { ... }; some_value }) { ... }

is basically equivalent to:

    loop {
        while some_other_cond { ... }
        if !some_value { break; }
        ...
    }

in which case it is clear that the loops are nested.