Compute type fragments left over from moves

Compute type fragments left over from moves.

This is part 1 of a pair of PRs that prepare for planned revisions to our drop implementation; this foundation is required for either "static drop semantics" ([RFC PR 210](https://github.com/rust-lang/rfcs/pull/210)) or for the improved dynamic drop semantics that uses an out-of-band bitfield on the stack to track which loan-paths still need to be dropped.

This PR deliberately leaves out the control-flow analysis changes that are actually necessary for the drop changes, which are in part 2.  This is more fundamental stuff here.

(The commits are deliberately split up in an effort to ease reading these revisions; I do not plan to squash them.)
can you clarify whether BOTH `matched_pat` and `consume_pat` are called on leaves, or just one of them?