str: Implement a faster Chars iterator for &str

Reimplement the string slice's `Iterator<char>` by wrapping the already efficient
slice iterator.

The iterator uses our guarantee that the string contains valid UTF-8, but its only unsafe
code is transmuting the decoded `u32` into `char`.
Could this be formulated as:

```rust
fn next() {
    let next_byte = match self.iter.next() {
        None => return None,
        Some(&next_byte) if next_byte < 128 => return Some(next_byte as char),
        Some(&next_byte) => next_byte,
    };
    // decode_multibyte
```