only use the ES5 property copying if all three of Object.defineProperty, Object.getOwnPropertyDescriptor, and Object.prototype.hasOwnProperty are defined, as well as if Object.defineProperty or .getOwnPropertyDescriptor succeed for non-DOM objects.