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. 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.