Added type fragmentation code to compute drop obligations remaining post move.
Track what drop obligations are established on match arms.

This is accomplished by:

1. Add `MatchMode` enum to `expr_use_visitor`.

2. Computing the match mode for each pattern via a pre-pass, and then
   passing the mode along when visiting the pattern in
   expr_use_visitor.

3. Adding a `fn matched_pat` callback to expr_use_visitor, which is called on
   all nodes of the pattern (as opposed to `fn consume_pat`, which is only
   invoked for identifiers at the leaves of the pattern), and invoking it
   accordingly.

Of particular interest are the `cat_downcast` instances established
when matching enum variants.
Distinguish move semantics for `a @ Var(_)` from that of `Var(_)`.

Note that due to PR #16053, we only actually deal with `a @ Var(_)`
here, (as opposed to a hypothetical `a @ Var(ref b)`, which cannot
currenty arise, and maybe will never be supported for non-copy data).
Puts some previous dataflow artifacts back in.

Allowed me to squash the commit that removed them and then recover the
prior state.
remove another dataflow artifact
added dataflow additions for fragmented drop obligations.
Code to compute the fragment siblings and add them to the dataflow inputs.
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.
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.

updated the expurgated diff.
update needs-drop-expurg.diff
update the expurgated diff.