Fix reparenting when setting TimedItem.parentGroup

Makes sure that we update both the previous and new parents when assigning to
TimedItem.parentGroup. Also adds a number of tests concerned with reparenting.
Take a copy of the array of children before creating an AnimationGroup

This avoids bugs due to the array being modified as a result of creating the
AnimationGroup. See
https://github.com/web-animations/web-animations-js/issues/65 for details.

Also add checks to make sure a TimedItem never sets itself as its parent.
Fix handling circular references in ancestry chain

We should never end up with circular references in the ancestry chain. Fix this
by checking for an ancestor when adding children in AnimationGroup.splice(). If
a new child is also an ancestor, we remove it from the ancestor chain before
adding it as a child.
logging