Object Versioning: constructed objects always get a prototype

note that:

C = function() {};
delete C.prototype;
o = new C();

!!o.__proto__; // --> true
o.__proto__.constructor === o.constructor; // --> true
Object Versioning: better copy routine (for versions of objects)

handles arrays, functions, and dates much more appropriate :D