code: function(obj) {
      if (get(this, 'isFrozen')) throw new Error(Ember.FROZEN_ERROR);
      if (none(obj)) return this; // nothing to do
  
      var guid = guidFor(obj),
          idx  = this[guid],
          len = get(this, 'length'),
          isFirst = idx === 0,
          isLast = idx === len-1,
          last, removed;
  
  
      if (idx>=0 && idx<len && (this[idx] === obj)) {
        removed = [obj];
  
        this.enumerableContentWillChange(removed, null);
        if (isFirst) { Ember.propertyWillChange(this, 'firstObject'); }
        if (isLast)  { Ember.propertyWillChange(this, 'lastObject'); }
  
        // swap items - basically move the item to the end so it can be removed
        if (idx < len-1) {
          last = this[len-1];
          this[idx] = last;
          this[guidFor(last)] = idx;
        }
  
        delete this[guid];
        delete this[len-1];
        set(this, 'length', len-1);
  
        if (isFirst) { Ember.propertyDidChange(this, 'firstObject'); }
        if (isLast)  { Ember.propertyDidChange(this, 'lastObject'); }
        this.enumerableContentDidChange(removed, null);
      }
  
      return this;
    }
docs: implements Ember.MutableEnumerable