Avoid IE8’s broken `Object.defineProperty`

IE 8 only supports `Object.defineProperty` on DOM elements, so detect that and fall back.