Handle non-array objects with

Detects when an object attribute is removed, added, or changed.
Also detects when a non-object becomes an object.
Implementation short circuits to prevent iterating through both old and new object keys each time.
Handles objects that have length attribute.