mainwindow: Close the previewer only when the user pressed ESC or Q

The main problem was that if the user tries to click the playback bar to
play at a different position, it happens too often to get the mouse
cursor outside of the window and then the dialog was closing.

- Also allow using SPACE to toggle playback.
- Also moved the preview UI logic to a new PreviewAssetWindow class.
render: Allow the render progress dialog to close the desktop notification

This got broken in 38861f742af4ce115c9265f3e7c85d8ea0f17111
configure: Rename constant name to be uppercase
widgets: Handle smooth scroll events on the zoom slider
widgets: Simplify the zoom controls logic

- Made the UI callbacks as thin as possible.
- Get and set the zoom level by using Zoomable directly instead of
  through the _zoomAdjustment field.
- Got rid of the _updateZoomSlider hack which at this point became
  obsolete.
- Got rid of the zoomed_fitted field because it was not used anywhere.
- Removed the timeline._scrollToPlayhead() because it does not make
  sense to do that when the zoom level is changed.
timeline: Make sure the zoom level is always an int
widgets: Use the zoom slider tooltip to display the duration of the displayed timeline
elements: Remove code with no effect
elements: Avoid 0-sized clips to become invisible
elements: Integrate function into the single place where it's called

- Also removed noop TODO.
elements: Fix variable name spelling
elements: Set more fields in the TimelineElement constructor
elements: Remove unneeded track parameter
timeline: Make the timeline 2D
elements: Remove the keyframe menu

It's used only for removing the keyframe, but we already have
double-click for that, and we try to avoid right-clicking as much as
possible.
elements: Make sure the keyframes are displayed above the lines