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).
Fix reverseISearch when there is no search

The original line should be kept, not emptied.
Move every handler into the big switch

The pre-switch handlers don't cascade properly. Fix this by putting them
into the big switch and using a `goto` to keep the (already read) next
input.

This fixes Tab after ctrlR, Tab after ctrlY, and ctrlY after ctrlR.
Document Ctrl-Y (paste from Yank buffer)
Handle Ctrl-C by temporarily disabling SIGINT

Ctrl-C is "Reset current line". This also reduces the chance that a
naïve program that hasn't installed its own SIGINT handler will leave
the terminal in an unusable state.

Inspired by pull request #28