Avoid un-necessary decode in startsWith/endsWith

As requested in #2503.

Perhaps it's overkill?
Because it's a range of codepoints.  `"é".front == "é"[0]` produces false, so so should startsWith.