code: function(n, v, cf) {
  		if (this[cf]) {
  			var old = this[n];
  			this[n] = v;
  			this[cf](old);
  		} else {
  			this[n] = v;
  		}
  	}
docs: Sets property named 'n' with value 'v' and then invokes callback
  function 'cf' (if specified) with the original value of property 'n'.
  All property setting should bottleneck here so that objects can
  observe changes wlog.