code: function ModelCollection(value){
                  value = value || [];
  
                  // wrap each obj
                  value.forEach(function(v, i){
                      // this should not happen but prevent blow up
                      if(v === null || v === undefined) return;
  
                      // reset to new instance
                      value[i] = wrapAsNewModelInstance(v, value);
                  });
  
                  // override push to set an instance
                  // of the list on the model so destroys will chain
                  var __oldPush = value.push;
                  value.push = function(){
                      // Array.push(..) allows to pass in multiple params
                      var args = Array.prototype.slice.call(arguments);
  
                      for(var i=0; i<args.length; i++){
                          args[i] = wrapAsNewModelInstance(args[i], value);
                      }
  
                      __oldPush.apply(value, args);
                  };
  
                  // add list helpers
                  if(options.list){
                      extend(value, options.list);
                  }
  
                  return value;
              }
docs: Collection ------------------------------------------------------------  
  Model list instance.
  All raw objects passed will be converted to an instance of this model.
  
  If we `push` a item into an existing collection, a pointer will be made
  so on a destroy items will be removed from the array as well.
  
  Example usages:
  var zoos = new Zoo.List([ {}, ... ]);