Use ES5 getters and setters as well as __proto__ where available.

This fixes pure JS issues with IE9+