Add `utf16_iter`

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.

Closes #14358

[breaking-change]
auto merge of #14613 : schmee/rust/utf16-iterator, r=huonw

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.~~ EDIT: Tests now use `utf16_iter`.

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