lib/utils.js
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;
}
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;
}
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 ; }
roll custom extend since underscore's doesn't play nice with getters and setters
roll custom extend since underscore s doesn t play nice with getters and setters