Add WGSL support for do-while loops.

These can be implemented pretty naturally as a WGSL loop {}
construct. Most do-while tests now pass, but a few do not, because
WGSL is unable to detect unconditional returns within a loop body.
This causes some valid SkSL tests to fail in WGSL with a "missing
return at end of function" error. This will be fixed in a followup.

Example test breakages:
https://paste.googleplex.com/5519253959606272
https://paste.googleplex.com/6640317599055872

Bug: skia:13092
Change-Id: I72eec654e9a03e506dce1b4419590bba2290e4bc
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/708376
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Arman Uguray <armansito@google.com>
Commit-Queue: Arman Uguray <armansito@google.com>
10 files changed