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.