fix #7248: throw boundserror for invalid indices in ind2chr/chr2ind

Fixes #7248.  Previously, `chr2ind` and `ind2chr` performed no bounds checking for `DirectIndexString`s.  Now they throw a `BoundsError`.

Also, for other string types `chr2ind(s, i)` threw a `BoundsError` for `i` too large but silently returned the value for `i < 1`.   I don't understand why this behavior was desirable, so I changed it to throw a `BoundsError` in both cases.
Maybe we should just define:
```
checkbounds(s::String, I) = checkbounds(s, I)
```
This will check `1 <= I`, rather than `start(s) <= I`, however.  Is `start(s) != 1` a practical concern?