Clean up check_loans.

Refactor a number of functions in check_loans to take node IDs and spans
rather than taking expressions directly. Also rename some variables to
make them less ambiguous.

This is the first step towards using ExprUseVisitor in check_loans, as
now some of the interfaces more closely match those used in
ExprUseVisitor.
Fix mem_categorization to treat an AutoObject adjustment as an rvalue.

Currently mem_categorization categorizes an AutoObject adjustment the
same as the original expression. This can cause two moves to be
generated for the same underlying expression. Currently this isn't a
problem in practice, since check_loans doesn't rely on ExprUseVisitor.
Add an Init mode to MutateMode.

This isn't necessary right now, but check_loans needs to be able to
distinguish between initialization and writes in the ExprUseVisitor
mutate callback.
Add a move reason to the Move ConsumeMode.

Currently it is not possible to distinguish moves caused by captures
in the ExprUseVisitor interface. Since check_Loans needs to make that
distinction for generating good diagnostics, this is necessary for
check_loans to switch to ExprUseVisitor.
Use the MoveReason to determine a more precise MoveKind in gather_moves.
Add a kind_of_move_of_path method to FlowedMoveData.
Add a contains_deref method to LoanPath.
Change check_loans to use ExprUseVisitor.
Add new tests for borrowck field-sensitivity.
Add a test for borrowck errors with multiple closure captures.

When converting check_loans to use ExprUseVisitor I encountered a few
issues where the wrong number of errors were being emitted for multiple
closure captures, but there is no existing test for this.
Correct some nits, for the most part. In one case, I rewrote the test for what
paths are assignable to be more precise, though further tweaks are needed for
field sensitivity to truly work.