Support IE8 by wrapping Object.defineProperty with a try catch

"Internet Explorer 8 implemented a Object.defineProperty() method that could only be used on DOM objects." - [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty#Internet_Explorer_8_specific_notes)

Currently this polyfill throws in IE8, but wrapping `Object.defineProperty` with a try catch fixes that.