     var duration:NSTimeInterval { get }
     var delay:NSTimeInterval { get }
     func then(duration duration: NSTimeInterval, delay: NSTimeInterval, curve: Curve?, animation: Void -> Void, completion: ((finished: Bool) -> Void)?) -> Animation
+    func beginAnimation()
+    func postponeAnimation() -> Animation
 }
 
 protocol AnimationDelegate: class {

        self.performSelector(Selector("commitAnimation"), withObject: nil, afterDelay: 0.0)
    }
    
    func postponeAnimation() {
        ongoingAnimations.remove(self)
        NSObject.cancelPreviousPerformRequestsWithTarget(
            self,
            selector: Selector("commitAnimation"),
            object: nil
        )
    }
    
    func commitAnimation() {}


protocol DelegatedAnimation: Animation {
    weak var delegate: AnimationDelegate? { get set }
}

protocol PropertyAnimation: DelegatedAnimation {
