Main: fix initial draw.

Previously, the progress bar was not being drawn when mpv was launched
unless fullscreen was toggled.

It turns out that the `fullscreen` property observer in OSDAggregator
fires as soon as mpv starts. Since our ProgressBar and friends no longer
need dimensions passed to their constructor, they should be initialized
immediately, so that they are already attached as subscribers to the
aggregator when the observer fires.
Call updateDisplaySize every 2 seconds.

Since window-scale doesn't appear to be an observable property, there's
no way to actually get notified of screen size changes other than
manually checking.
Remove erroneous comment.

Update isn't called by an event watcher but rather a periodic timer,
which doesn't actually pass arguments to its callback, I think.

The explicit comparison to true has been left in for safety.
Improve build script.

By cleverly checking mtimes, only build files that have been modified
since the last time they were built.
Add animation queue and module.

Big changes afoot. This probably should have been lumped into a single
commit.

Reintroduces the Rect class. Used for determining if the mouse is
hovering a particular Rect within the window. ProgressBar and
ProgressBarBackground inherit from it.

OSDAggregator passes the current mouse position to its subscribers'
update callback, for use with hover effects.

The animation class takes a callback and uses it to animate a value
across a duration. It must be attached to an instance of an
AnimationQueue, which updates an aggregator when it has active
animations. The AnimationQueue repeatedly calls the update method of
each animation registered to it, as well as the forceUpdate method of
the aggregator associated with it.