feat($animate): use requestAnimationFrame instead of a timeout to issue a reflow

Closes #4278
Closes #4225