defineProperties only uses Object.defineProperty if it's available.
Wrap Map and Set in isES5, since they aren't shimmable in an ES3 environment.
Object.getOwnPropertyDescriptors, Object.getPropertyDescriptor, and Object.getPropertyNames require a true ES5 environment.
Swapping the logic.
Merge pull request #40 from ljharb/works_in_es3

Make sure as much of ES6 as possible works in ES3