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).
Code to compute the fragment siblings and add them to the dataflow inputs.
Add `node_to_user_string`, `node_to_string` variant that drops id from output.
Add `span_end_err` as a way to print an error message at the *end* of a span.

This will be utilized by the rustc_drop_obligations
code-annotation-via-errors hack to print out the drop obligations that
are removed at the end of scopes.
Added code to emit the gen/kill sets in source annotated form.

When you add `rustc_drop_obligations` as an annotation on a function,
it will print all of the drop-obligation manipulations as individual
compiler errors associated with the expressions that caused the effect
on the drop obligation state.

Surround drop-obligations in output with `` quotes to help unintended prefix matches

Prints scope-end messages at end of their scope.
Tests illustrating the `rustc_drop_obligations` instrumentation attribute.
added dataflow additions for fragmented drop obligations.

This reestablishes this branch as an appropriate basis for
fsk-needs-drop-analysis-2.
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.