Implement `if let`

Implement the new desugaring `if let` syntax.

Fixes #16779.
We actually have no style guidelines here, and some minor precedence for making very short else expressions into one-liners, such as https://github.com/rust-lang/rust/blob/master/src/librustdoc/html/render.rs#L885