Wrap everything in a self-invoking anonymous function

1. Wrap everything in a self-invoking anonymous function
2. Use a function declaration instead of a function expression for the `arePropertyDescriptorsSupported` function
3. Cache `undefined` so it gets renamed to something shorter when compressed