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

This fixes pure JS issues with IE9+

This cleans up the code to use ES5 getters and setters in the object literals instead of reflection methods.

This also uses __proto__ in the object literals (wrapped in createObject for IE support)