old_contents: (function () {
  	"use strict";
  
  	// modified from https://github.com/kriskowal/es5-shim
  	var has = Object.prototype.hasOwnProperty,
  		is = require('is'),
  		forEach = require('foreach'),
  		hasDontEnumBug = !({'toString': null}).propertyIsEnumerable('toString'),
  		hasProtoEnumBug = (function () {}).propertyIsEnumerable('prototype'),
  		dontEnums = [
  			"toString",
  			"toLocaleString",
  			"valueOf",
  			"hasOwnProperty",
  			"isPrototypeOf",
  			"propertyIsEnumerable",
  			"constructor"
  		],
  		keysShim;
  
  	keysShim = function keys(object) {
  		var isObject = object !== null && typeof object === 'object',
  			isFunction = is.fn(object),
  			isArguments = is.arguments(object),
  			theKeys = [];
  
  		if (!isObject && !isFunction && !isArguments) {
  			throw new TypeError("Object.keys called on a non-object");
  		}
  
  		if (isArguments) {
  			forEach(object, function (value) {
  				theKeys.push(value);
  			});
  		} else {
  			var name,
  				skipProto = hasProtoEnumBug && isFunction;
  			for (name in object) {
  				if (!(skipProto && name === 'prototype') && has.call(object, name)) {
  					theKeys.push(name);
  				}
  			}
  		}
  
  		if (hasDontEnumBug) {
  			forEach(dontEnums, function (dontEnum) {
  				if (has.call(object, dontEnum)) {
  					theKeys.push(dontEnum);
  				}
  			});
  		}
  		return theKeys;
  	};
  
  	module.exports = keysShim;
  }());
  
  
new_contents: (function () {
  	"use strict";
  
  	// modified from https://github.com/kriskowal/es5-shim
  	var has = Object.prototype.hasOwnProperty,
  		is = require('is'),
  		forEach = require('foreach'),
  		hasDontEnumBug = !({'toString': null}).propertyIsEnumerable('toString'),
  		hasProtoEnumBug = (function () {}).propertyIsEnumerable('prototype'),
  		dontEnums = [
  			"toString",
  			"toLocaleString",
  			"valueOf",
  			"hasOwnProperty",
  			"isPrototypeOf",
  			"propertyIsEnumerable"
  		],
  		keysShim;
  
  	keysShim = function keys(object) {
  		var isObject = object !== null && typeof object === 'object',
  			isFunction = is.fn(object),
  			isArguments = is.arguments(object),
  			theKeys = [];
  
  		if (!isObject && !isFunction && !isArguments) {
  			throw new TypeError("Object.keys called on a non-object");
  		}
  
  		if (isArguments) {
  			forEach(object, function (value) {
  				theKeys.push(value);
  			});
  		} else {
  			var name,
  				skipProto = hasProtoEnumBug && isFunction,
  				ctor = object.constructor,
  				skipConstructor = ctor && ctor.prototype === object;
  
  			for (name in object) {
  				if (!(skipProto && name === 'prototype') && !(skipConstructor && name === 'constructor') && has.call(object, name)) {
  					theKeys.push(name);
  				}
  			}
  		}
  
  		if (hasDontEnumBug) {
  			forEach(dontEnums, function (dontEnum) {
  				if (has.call(object, dontEnum)) {
  					theKeys.push(dontEnum);
  				}
  			});
  		}
  		return theKeys;
  	};
  
  	module.exports = keysShim;
  }());
  
  
subject: Make sure that a prototype's constructor property is not enumerable. Fixes #3.