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
Is this loop necessary? Doesn't a break always identify a *precise* ancestor loop? And if not, why would finding the innermost enclosing loop be correct? (That is, if we ever added support for breaking from arbitrary blocks (which we probably ought to do at some point?) I'd expect them to occupy nodes in the loop analysis tree (basically like a singleton loop)).