anchor.diff:      _actions.removeAt(i);
     }
   
  +  /// Stops all actions with the specified tag and removes them from the
  +  /// controller.
  +  ///
  +  ///     myNode.actions.stopWithTag("myActionGroup");
     void stopWithTag(Object tag) {
       for (int i = _actions.length - 1; i >= 0; i--) {
         Action action = _actions[i];
  
positive.code: 
  typedef void ActionCallback();
  
  abstract class Action {
    Object _tag;
    bool _finished = false;
    bool _added = false;
  
    void step(double dt);
    void update(double t) {
    }
  
  
negative.code:   }
  }
  
  /// An action that plays the supplied actions in parallell. The duration of the
  /// [ActionGroup] will be the maximum of the durations of the actions used to
  /// compose this action.
  class ActionGroup extends ActionInterval {
    List<Action> _actions;
  
    /// Creates a new action with the list of actions passed in.
    ///
    ///     var myGroup = new ActionGroup([myAction0, myAction1, myAction2]);
    ActionGroup(this._actions) {
      for (Action action in _actions) {
        if (action.duration > _duration) {
  