Refactor `expr_kind` and `expr_is_lval`

Instead of calling out to `expr_kind` for `expr_is_lval` handle the logic
separately. This avoids a number of unneeded checks that were only there
to categorise rvalues.

Since `expr_is_lval` was the only caller of `expr_kind` outside of
`trans::expr`, I moved the function (and the enum) to that file.
Add test
Fix long line
Fixup comments and artifacts from migration

Some of the comments had become out-of-date, they have been fixed. A
large comment referred to a condition that shouldn't happen in trans, so
rather than returning a value, it now panics if the case arises.
auto merge of #19487 : Aatch/rust/issue-19337, r=nikomatsakis

Instead of calling out to `expr_kind` for `expr_is_lval` handle the logic separately. This avoids a number of unneeded checks that were only there to categorise rvalues. This technically adds some maintenance overhead, but given that expr_kind was doing way more work than `expr_is_lval` needed, I think this an acceptable trade-off.

Since `expr_is_lval` was the only caller of `expr_kind` outside of `trans::expr`, I moved the function (and the enum) to that file. Most of what `expr_kind` did was for trans anyway, so it's a better place for it.