Make sure `Animation.hasEnded()` is true after `ShadowAnimation.invokeEnd()` is called
Make `Animation.hasEnded()` true for `Animation.cancel()`
Merge pull request #720 from coreydowning/animation-ended

Fix `Animation.hasEnded()` so it is true after `invokeEnd()`/`cancel()`