anchor.diff:    ###
     finish = (elementOrSelector) ->
       motionController.finish(elementOrSelector)
  +
  +  ###**
  +  This event is emitted on an [animating](/up.animating) element by `up.motion.finish()` to
  +  request the animation to instantly finish and skip to the last frame.
  +
  +  Promises returned by completed animation functions are expected to settle.
  +
  +  Animations started by `up.animate()` already handle this event.
  +
  +  @event up:motion:finish
  +  @param {Element} event.target
  +    The animating element.
  +  @experimental
  +  ###
   
     ###**
     Performs an animated transition between the `source` and `target` elements.
  
positive.code:   If you choose to *not* use `up.animate()` and roll your own
    logic instead, your code must honor the following contract:
  
    1. It must honor the options `{ delay, duration, easing }` if given
    2. It must *not* remove any of the given elements from the DOM.
    3. It returns a promise that is fulfilled when the transition has ended
    4. If during the animation an event `up:motion:finish` is emitted on
       the given element, the transition instantly jumps to the last frame
       and resolves the returned promise.
  
    Calling [`up.animate()`](/up.animate) with an object argument
  
negative.code:   are completed.
  
    Animations are completed by jumping to the last animation frame instantly.
    Promises returned by animation and transition functions instantly settle.
  
    Emits the `up:motion:finish` event that is already handled by `up.animate()`.
  
    Does nothing if there are no animation to complete.
    
  