Record local caret visibility before every local operation and restore after execution

The caret is now only scrolled back into view if it was originally
visible when the most recent operation commenced execution.

Previously, any operation local operation would immediately recenter
the view back onto the local user's caret. This behaviour is undesirable
however if the user has deliberately scrolled the caret out of view before
performing an operation (e.g., removing an annotation whilst the caret
is off screen).

Fixes issue #33