Factored shared bits into ChainAnimation, made it reject double registers.

This will not do anything sensible:

  Animator chain = anim.action(foo).then();
  chain.action(bar);
  chain.action(baz);

so we'll have the second call to action simply fail rather than do weird things
to the internal data structures and confuse you because it is not launching two
animations in parallel.

If you want to launch two animations in parallel, you have to do this:

  anim.action(foo).then().action(new Runnable() { public void run () {
    anim.action(bar);
  })).then().action(baz);

Supporting both parallel animations and repeat turns things into a complicated
mess, and I used repeat half a dozen times in Spellwood and parallel animation
launching once, so repeat got first billing.