Add support for `if let`

This is *heavily* based on `if let` (#17634) by @jakub- and @kballard

This should close #17687