Check for ES5 Object methods before using them

This updates the Symbol and Object#__proto__ tests so that ES5 methods
are either not used, or checked for existence beforehand.

Note that Object#__proto__ still requires
Object.getOwnPropertyDescriptor outright, simply because it's impossible
to verify that it is indeed an accessor property on Object.prototype
(instead of just special syntax) without it.