anchor.diff:      this.duration = action.duration / speedFactor;
       this.action = action;
     }
  -  Speed clone() {
  -    return new Speed(action.clone(), action.duration/duration);
  -  }
  -  Speed reverse() {
  -    return new Speed(action.reverse(), action.duration/duration);
  -  }
  +  Speed clone() => new Speed(action.clone(), action.duration/duration);
  +  Speed reverse() => new Speed(action.reverse(), action.duration/duration);
   
     void start() {
       action.target = this.target;
       action.start();
     }
   
  -  void stop() {
  -    action.stop();
  -  }
  -
  +  void stop() => action.stop();
     void _interval(num t) {
       action._interval(t);
     }
  
positive.code: class Loop extends Action {
    Action action;
    bool done = false;
    Action actionCopy = null;
  
    Loop(Action this.action);
    Loop clone() => new Loop(action);
    Loop reverse() => new Loop(action.reverse());
  
    void start() {
      _nextAction();
    }
  
    void step(num dt) {
      actionCopy.step(dt);
      if (actionCopy.done) {
        _nextAction();
      }
    }
  
    void stop() {}
  
    _nextAction() {
      if (actionCopy != null) {
        actionCopy.stop();
      }
      actionCopy = action.clone();
  
      actionCopy.target = target;
      actionCopy.start();
  
      // this is useful for instant actions
      if (actionCopy.done) {
        _nextAction();
      }
    }
  
negative.code:   vec2 position;
  
    Place(this.position);
    Place clone() => new Place(position);
    
    void start() {
      target.position = position; 
    }
  }
  
  class CallFunction extends InstantAction {
    // TODO use a typedef here
    dynamic method;
    vec2 position;
  
    CallFunction(this.method);
    CallFunction clone() => new CallFunction(method);
    
    void start() { 
      method(); 
    }
  }
  
  class Hide extends InstantAction {
    Hide clone() => new Hide();
    Show reverse() => new Show();
    
    void start() {
      target.visible = false;
    }
  }
  
  class Show extends InstantAction {
    Show clone() => new Show();
    Hide reverse() => new Hide();
    
    void start() {
      target.visible = true;
    }
  }
  
  class ToggleVisibility extends InstantAction {
    ToggleVisibility clone() => new ToggleVisibility();
    ToggleVisibility reverse() => new ToggleVisibility();
    
    void start() {
      target.visible = !target.visible; 
    }
  }
  
  abstract class IntervalAction extends Action {
  