Stop relying on non-enumerability

This almost eliminates all uses of `Object.defineProperty` and `.defineProperties`, but does so at some performance cost, so I'm submitting it as a pull request.