Scroll the annotation note into view after creation

Makes annotation insertion feel cleaner as the user can now see the complete annotation on insertion. This fixes #486.

The viewport subsystem has been made pluggable as the project I'm using this in actually has multiple nested scroll frames that all need to be controlled in order to properly scroll things into view. This approach will allow me to ensure the scrollIntoView requests can be easily adapted to this more complex(insane?) scroll pane setup.

Patch summary:
* Move simplified client rect typedef to a common location
* Extract viewport management logic into standalone system
``core.DomUtils`` has some things that deal with ClientRects, but I haven't bothered migrating them across. Could move it into gui I suppose...