Wrap everything in a self-invoking anonymous function

Wrap everything in a self-invoking anonymous function,
use a function declaration instead of a function expression for the `arePropertyDescriptorsSupported` function, and
cache `undefined` so it gets renamed to something shorter when compressed.