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
Do you think it is worth canonicalizing these, so that we can make ty::Region copy but also avoid duplicates etc? It's hard to know, I guess -- of course current usage patterns will see a lot of duplicates, but that may not be true long term.