fix($animate): ensure the final closing timeout respects staggering animations
feat($animate): use requestAnimationFrame instead of a timeout to issue a reflow

Closes #4278
Closes #4225