Bug fixes in Animation3D

## Three Little Buggies
Once upon a time, there were three little buggies that lived in Animation3D land. First buggy caused multiple listeners to be registered. Second buggy caused multiple onAnimationEnd() events to fire. And finally third buggy caused interpolators to return inverted interpolation values.

One day, a big bad programmer noticed these three little buggies and huffed and puffed and blew them away.