Refactor common animation code into base class
Add run() method to base class to loop an animation
Pull end bounds-checking up into BaseAnimation