Refactor: merge two fields of `mc::CopiedUpvar` into a single `ty::UpvarId`.

(This refactoring looks like a wash in this commit, in terms of
overall code-cleanliness; but it makes things nicer in a future commit
for static drop semantics.)
Added `CaptureKind` to `LpUpvar` and generalized it to represent by-ref and by-value captures.

This is necessary to be able to properly backtrack in a loan-path to
the definition site of the original variable (which I found necessary
in later commits).
Add `LpDowncast`, `LoanPath` variant tracking downcasts in match arms.

`LpDowncast` carries the `DefId` of the variant itself.  To support
this, added the enum variant `DefId` to the `cat_downcast` variant in
`mem_categorization::categorization`.
Add `ty` to `LoanPath`.

To make this clean, refactored old `LoanPath` enum into a
`LoanPath` struct with a `ty::t` and a newly-added `LoanPathVariant` enum.

This enabled me to get rid of the ugly and fragile `LoanPath::to_type`
method, and I can probably also get rid of other stuff that was
supporting it, maybe.
Added type fragmentation code to compute drop obligations remaining post move.
Add `MatchMode` enum to `expr_use_visitor`.
Added state tracking whether a given cfg node is reachable or not.
revised control-flow-graph to indicate that we flow into heads of patterns
before their subpatterns.

This makes sense when you think about the flow of how one checks if
patterns match.  Patterns are matched from top-down (while
value-producing expressions are built from the bottom up).

It also solves a problem for the dataflow of needsdrop.
slight generalization of dataflow in prep for needs-drop analysis.
Added optional printing of drop obligations to flow graph.
Track match mode via a prepass on patterns.

This commit does not make use of the information garnered via the prepass,
but a forthcoming commit does.
Extended `DefBinding` to unify idents in patterns like `A(x) | B(x)`.

Adds `BindingAliasMode` enum and attaches it to `DefBinding, tying an alias to a
uniform representative for the set.  Extends `resolve` to actually construct
such a thing properly.

Leaves the question of what to do about DXR as an unresolved FIXME in
`rustc::middle::save`.
Add Method ids to pretty-print identified output.
Extended move_error to track moves into wildcard patterns as well as idents.
DO NOT CHECK IN: diffs and patches for rust-needsdrop.