std::str: Bench test for char iterators
std::str: Small fix for slice
std::str: Special case char_range_at_reverse so it is faster

Implement char_range_at_reverse similarly to char_range_at, instead of
re-using that method.
std::str: Add str::raw::slice_unchecked

Add a function like raw::slice_bytes, but it doesn't check slice
boundaries. For iterator use where we always know the begin, end indices
are in range.
std::str: Implement CharIterator separately

Let CharIterator be a separate type from CharOffsetIterator (so that
CharIterator can be cloned, for example).

Implement CharOffsetIterator by using the same technique as the method
subslice_offset.
std::str: Use CharOffsetIterator in .find() and .rfind()
std::str: Correct docstrings for lack of null terminator in ~str and &str
std::str: Rename .word_iter() to .whitespace_split_iter()

We don't want to keep this as "word_iter" since it's not correct for
unicode, which defines a different method for breaking text up into
words.