anchor.diff:  
     get value => _value;
   
  -  int get length => _bindings.length;
  +  int get length => _observers.length;
   
     void set value(newValue) {
       _value = notifyPropertyChange(_VALUE, _value, newValue);
  
positive.code:   void bind(name, model, String path) {
      unbind(name);
  
       // TODO(jmesserly): should we avoid observing until we are observed,
       // similar to PathObserver? Similar for unobserving?
      _bindings[name] = new PathObserver(model, path).bindSync((value) {
        _values[name] = value;
        _scheduleResolve();
      });
    }
  
    void unbind(name, {bool suppressResolve: false}) {
      var binding = _bindings.remove(name);
      if (binding == null) return;
  
      binding.cancel();
  
negative.code:     value = _combinator(_values);
    }
  
    /**
     * Closes the observer.
     *
     * This happens automatically if the [value] property is no longer observed,
     * but this can also be called explicitly.
     */
    void close() {
      for (var binding in _observers.values) {
        binding.cancel();
      }
      _observers.clear();
      _values.clear();
      value = null;
    }
  
    _unobserved() => close();
  }
  