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.