code: function diffObjects(value, oldValue) {
      if ( !(value && oldValue && typeof value === 'object' && typeof oldValue === 'object')) {
        throw new TypeError('Both values for diff.object must be objects');
      }
      var changeRecords = [];
      var prop, propOldValue, propValue;
  
      // Goes through the old object (should be a clone) and look for things that are now gone or changed
      for (prop in oldValue) {
        propOldValue = oldValue[prop];
        propValue = value[prop];
  
        // Allow for the case of obj.prop = undefined (which is a new property, even if it is undefined)
        if (propValue !== undefined && !diffBasic(propValue, propOldValue)) {
          continue;
        }
  
        // If the property is gone it was removed
        if (! (prop in value)) {
          changeRecords.push(new ChangeRecord(value, 'delete', prop, propOldValue));
        } else if (diffBasic(propValue, propOldValue)) {
          changeRecords.push(new ChangeRecord(value, 'update', prop, propOldValue));
        }
      }
  
      // Goes through the old object and looks for things that are new
      for (prop in value) {
        propValue = value[prop];
        if (! (prop in oldValue)) {
          changeRecords.push(new ChangeRecord(value, 'add', prop));
        }
      }
  
      if (Array.isArray(value) && value.length !== oldValue.length) {
        changeRecords.push(new ChangeRecord(value, 'update', 'length', oldValue.length));
      }
  
      return changeRecords;
    }
docs: Diffs two objects returning an array of change records. The change record looks like: ```javascript { object: object, type: 'delete|update|add', name: 'propertyName', oldValue: oldValue } ```