Add support for `while let`

This is *heavily* based on `if let` (#17634) by @jakub- and @kballard

This should close #17687
Is there a specific reason this is an error? What if I want to do an infinite loop with destructuring?