code: function extend(obj) {
    var slice = Array.prototype.slice;
  
    slice.call(arguments, 1).forEach(function(source) {
      var getter
        , setter;
  
      for (var key in source) {
        getter = source.__lookupGetter__(key);
        setter = source.__lookupSetter__(key);
  
        if (getter || setter) {
          getter && obj.__defineGetter__(key, getter);
          setter && obj.__defineSetter__(key, setter);
        }
  
        else {
          obj[key] = source[key];
        }
      }
    });
  
    return obj;
  }
docs: roll custom extend since underscore's doesn't play nice with getters and setters