Add `node_to_user_string`, `node_to_string` variant that drops id from output.
compiletest: extend syntax with support for choosing same line as previous line.
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.
`MemCategorizationContext::pat_ty(BindByRef)` yields type of borrowed val now.

This is to fix a problem where I could not reliably map attach the
type for each loan-path to the loan-path itself because the same
loan-path was ending up associated with two different types, because
the cmt's had diverged in their interpretation of the path.
Override `LoanPath` Eq impl to enforce invariant: eq lp's always have eq types.
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).
expr_use_visitor: Placate tidy for distinguishing `a @ Variant(_)`.
Check other fields are consistent in `LoanPath::common`.
Added type fragmentation code to compute drop obligations remaining post move.

Add differentiation between assigned_fragments and moved_fragments.

Computes the fragment siblings implied by the moves and assignments,
prep to add them to dataflow inputs.

Added instrumentation to print out the moved/assigned/unmmoved/parents
for each function, factored out into separate submodule.

Add support for gathering all-but-one array fragments.
Added doc for the fragments work as it stands today.
First tests making use of the new fn move-fragments instrumentation.

The tests use new "//~| ERROR" follow syntax.

Includes a test for moves involving array elements.  It was easier
than i realized to get something naive off the ground here.
narrowed my FIXME in gather_match_variant after a little investigation.