Always update every caret after processing a batch of ops

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

Other commits
* Always update caret location even if it isn't visible
* Put caret register/remove functions side-by-side for clarity
* Caret no longer needs to be hidden between redraws
I've re-added the check, and added comments around some of the affected functions to make it clearer on the API that the caret won't scroll into view when it has been deliberately hidden.