Bind events directly to caret functions

The Caret itself already has logic to only perform expensive updates once
per redraw. There is no performance gained by CaretManager duplicating
this logic as well.

In addition, bind to any processing batch end. This is because any
type of edit may cause the caret to be pushed off screen including
adding annotations, splitting paragraphs, deleting text, modifying a
paragraph style etc. the most straightforward way to ensure the caret is
up-to-date is to check it's visibility on every edit operation.

Fixes #765
Caret no longer needs to be hidden between redraws

Removing layers of timeouts in the CaretManager mean the caret no longer
flickers badly when transitioning between large and small sizes.

See PR #369 for details about why this workaround was put in originally.