Implemented 'enterprise' version (more reliable, but more complex as well)

It should now correctly support both normal properties and accessors, so that original behavior is preserved where possible. I only had about an hour for all that, so please let me know if there is something stupid (is throwing strings a good idea?).

Also I have no idea what's the currently preferred testing tool in JS community, I hope QUnit is ok.