Bug fixes in Animation3D

The registerListener method now checks whether the same listener was
already added.
Added a check in the update method to prevent multiple end events from
firing.
Fixed an inverted interpolation bug.