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
Oh, and it needs to use [`CheckedMul`](http://doc.rust-lang.org/master/std/num/trait.CheckedMul.html): `high.checked_mul(&2)`.