feat($animate): use promises instead of callbacks for animations

BREAKING CHANGE