ProgressWidget: Tweaking the end of the animation

It may be that because ClientWindow is still switching to an
entirely different UI tree (busy=>normal), a blank frame is drawn and
thus the progress from the previous frame becomes visible for a brief
moment at the end of the animation.

Now ProgressWidget is not considered complete until two frames have
been drawn at the final position, allowing a GL buffer swap to occur
without consequences.

Todo for later: Busy mode shouldn't use a separate UI tree -- there's
shouldn't be a "busy mode" at all.
Merge branch 'master' into shadow-bias-c++
Optimize|Client|Shadow Bias|BiasIllum: Allocate memory for bias interpolation when necessary

Bias light sources do not animate and they aren't usually linked to
the sector light level. This means that allocating storage for the
data used whilst interpolating changes at BiasIllum level is usually
unnecessary and a waste of memory.

BiasIllum now only allocates this data dynamically as needed while
interpolating a change in lighting. When interpolation is completed
this storage is then released automatically. This reduces the amount
of memory needed by at least twelve bytes per bias illumination point
in the general case.