check_drops: fixes to the warning output.

Most importantly, fixed the notes to point to the *uninitialized*
paths.
Made `LoanPath::to_type` provide a better msg when type lookup fails.
rust-needsdrop: fixes to `LoanPath::to_type` and `ty::positional_element_ty`.
Added state tracking whether a given cfg node is reachable or not.
rust-needsdrop: Ignore unreachable portions of control-flow graph.
WIP checkpoint: code to calculate fragment siblings of enum variant.

Along the way, I attempted to move the check Drop impl stuff into
different places, and eventually removed my `fn needs_drop` predicate
entirely, though I am now not sure why I exactly did that in such a
manner.  Anyway I almost certainly will want it back in some form.
But this is all WIP so that's fine.
code cleanup, placate some lints.
Put a needs-drop filter back in.

Also, for this go-round, use different filter, `moves_by_default`, for
the kill sets (aka "remove_drop_obligations").
added proper support for suffix based searches.

it can also now be used to look up methods (before it could only
lookup fn items).  However, it still assumes that the only non-final
path components are mod names, when I really should add types in there
as well.
rust-needsdrop: Include LpDowncast variant info in string representation.
rust-needsdrop: instrument breakdown between fragment and non-fragment loans.

non-fragment loans are ones that were directly passed to `add_move` --
i.e. we were already paying for them to have an entry in the move
database and the dataflow bitsets.

fragment loans are the ones that were added solely for my
drop-obligation implementation of needs-drop analysis.
rust-needsdrop: more instrumentation of sibling fragments implied by enum variants.