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
Instead of adding an extra argument here, `gui.AnnotatableCanvas` should be extended with the method to retrieve the viewport, so that `canvas` would contain all the information this class needs.