Implement key-based navigation

Some notes:

- Navigation is done with previous/next navigation (keys: p/n). This more or less follows rows across the image, starting in the top left corner (the sidebar items have been adjusted to be in the same order). Navigation using cursor keys is not a trivial problem (in particular to ensure all boxes are attainable), and we agreed this was good enough for now;

- For users I thought it made more sense to move the bottom right and top left corners individually (rather than 'resize' the box), as that makes it easier to get the selection right. Bottom right uses shift + cursor keys, while top left uses Control + cursor keys. Might not be the best combination, but we thought we would do it this way and wait for user feedback;

- I added the key handling at the GraphicsView level. I think this definitely makes sense for the navigate/resize keys. Possibly zoom-to-selection (and delete) could be moved at the QMainWindow level, but I thought it fitted better there;

- I removed the numbered labels from the sidebar. The items are sorted on add to make prev/next navigation easy. To keep the labels as growing integers would require updating them all when new items are added. I assumed that once we had annotations these would replace the label anyway.

Available navigation:

p: Previous item
n: Next item
Cursor keys: Move current selection
Shift + Cursor keys: move bottom right corner(s) of current selection
Control + Cursor keys: move top left corner(s) of current selection
z: Zoom to current selection

Additional feature is that the view follows the selection (so pressing n/p - or selecting an item in the sidebar - will cause that box to come into view if it isn't)
I would rather like to argue against naming convention approach.

I think all the logic should remain in the QtGraphicsView class. Moving logic somewhere else just makes the code harder to follow. It is best to implement helper utilities that make the logic simpler and shorter to write.

This means that whatever naming convention we use in KeyHandler would have to be a generic one - not something specific to this use case. I don't think this is the best approach however. It is necessary in static languages (And Qt comes from C++), but in a dynamic language we can do much better.

The problem of the naming convention approach is that the semantic of the method is defined by the event itself - so you'll implement something called 'cursor_pressed'. But it's much nicer to read code where the semantic is defined by the receiver - so instead the method is called 'move_box'.