Teach libsyntax about `while let`
Desugar `while let` into `loop { match { ... } }`
Move `while let` behind `while_let` feature gate
Handle `while let` desugaring
Add tests for `while let`
Add `while let` to the reference

Closes #17687