Suggestion to refactor mouse event handling to use handlers rather than naming convention

This is a suggestion to refactor mouse event handling to use handlers rather than naming convention.

The idea is two:
- Ensure all mouse handling logic remains in the GraphicsView class;
- Name mouse events after what they do, rather than what the event is.

For example, instead of implementing `_mouse_middle` and `_mouse_move` to handle scrolling the view with the middle button, we implement `scroll_view` which gets called when the mouse is moved with the middle button pressed. This is done by setting up a handler:

`self.add_mouse_handler(('move', 'middle'), self.scroll_view)`