Use ES5 getters, setters and Object.create instead of __proto__ etc

This fixes pure JS issues with IE9+
Merge pull request #120 from arv/es5-proto

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