Add `utf16_iter`

Closes #14358.

The tests are not yet moved to `utf16_iter`, so this probably won't compile. I'm submitting this PR anyway so it can be reviewed and since it was mentioned in #14611.

This deprecates `.to_utf16`. `x.to_utf16()` should be replaced by either `x.utf16_iter().collect::<Vec<u16>>()` (the type annotation may be optional), or just `x.utf16_iter()` directly, if it can be used in an iterator context.

[breaking-change]

cc @huonw
I just realised this is wrong: it should be `(low, high * 2)`, since every `char` gets either one `u16` or two `u16`, meaning the length of this iterator is between 1 or 2 times as long as the underlying one.