Yet another approach to proper `if let` errors

As requested by @huonw, this approach places a MatchSource value into
ExprMatch(), making it easy to tell which `match` expressions came from
`if let` and which came from real `match`s. One benefit of this approach
is it makes it easy to fix the unnecessary parens lint warning.