Change refresh to accept []rune instead of string

The refresh function wants to operate on runes, and most call sites have
a []rune to pass in anyway.
Improve handling of decomposed glyphs

Not all combining characters are zero-width in every font, so the cursor
positioning still isn't perfect. It's a lot better now than it was before.

Not using golang.org/x/text/unicode/norm Iter because it does not operate
on denormalized runes, and I prefer to pass the runes as-input (for now).