Ensures that a call to release waits for the active animation to finish.

If a call to release is made before the animation on retain has finished, then the animation will never be "completed". This can happen if you show busy and get a response from your network in say <0.05 seconds (or always show busy and pull from a cache).

This fix introduces a promise which is created on a call to retain when the backdrop initially shows, and resolves when the animation has finished. If the backdrop is subsequently removed then it waits for the promise to resolve before removing the animation.