Implement `if let`

Implement the new desugaring `if let` syntax.

Fixes #16779.
better for these `fail!`s to be `span_bug`s where possible