Refactor BoxResizable to use MouseEvents

This is done in preparation for refactoring the way segments are handled (by having a `segmentObject` object - or something similar - which connects the various places where segments are used). As such there are things that should obviously not be in `BoxResizable` (such as `open_annotation_dialog` which was renamed from `mouseDoubleClickEvent`). Those issues will be addressed with this second refactoring.

As part of this I have changed the way `MouseEvents` works a bit:
- It now defaults to not propagating events, as this is the most common case. Users can set `delegate=True` when calling `add_mouse_handler` in which case the return value of the callback function will indicate whether to propagate or not;
- Rather than a `(event, button, modifier)` tuple, events are now defined as `(event, state)` allowing to trigger events depending on the value of any combination of property of the mouse state (`modifier` was added to the mouse state, as well as `over`). For example: ```add_mouse_handler(('wheel', {'modifier': QtCore.Qt.ShiftModifier}), self.zoom)```. One important consequence of that change is that values that are not defined are not taken into account. Previously not defining `button` meant the event would only trigger if no button was pressed. Now not defining `button` means that the event will trigger regardless of the button state.