TextBlock::seek slightly cleverer: guess position

TextBlock::seek now slightly more clever: it starts by guessing the
approximate position the cursor should end up based on the offset of the
character within the TextBlock and the average character width. In
most typefaces the width of each character varies widely, of course
('i' is usually much thinner than 'm'), but that doesn't matter if the
characters are distributed randomly in the string (as opposed to
clustered), and in typical text that would actually be typed, that's
close enough to true that this is still a good guess.

Because the cursor now might start on either side of the mousedown
(`pageX`), the loop now has to be able to move in either direction.

Also, for convenience, consolidateChildren() now returns the newly
consolidated child.
consolidateChildren now just calls Text::normalize

so the browser won't reflow

contract for consolidateChildren now requires cursor's jQ to not be in
the TextBlock, so seek now detaches the cursor, and reattaches it before
calling Cursor::offset()
{consolidate => fuse}Children #naming

shorter, cooler word, more strongly implies that you have to make sure
that only the TextPiece's DOM Text nodes are in the TextBlock and have
to detach the cursor span if it's in the TextBlock