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
Nit: This exact fragment (or one very much like it) appears many times. I was going to suggest either ginning up an empty LoopAnalysis for static scopes, or using a trait so that ExprUseVisitor can just ignore the distinction, but perhaps a helper method is actually all that's needed? Seems like all that ever happens is you call `from_scope`.