use defineProperty

Using `__defineGetter__` results in enumerable properties. That means if you do this...
```javascript
var str = "This is my String. There are many like it but this one is mine.";
for (var i in str)
    console.log (str[i]);
```
You don't just get the characters in your String, you also get a bunch of keys like 'cyan' and 'zalgo'.

This simple patch uses `defineProperty` instead and sets `enumerable` to `false`.