Fix problem when observing 2 objects in the same application

There was a collision in `beforeDict` that caused all observed objects to use the same lookup key. 

Only browsers without Object.observe support are affected.

This is because only a string can be a object key. If another type is given, implicit conversion takes place - which may lead to unexpected results:

```javascript
var key = "firstName";
beforeDict[key]; //becomes beforeDict["firstName"]

var key = 2;
beforeDict[key]; //becomes beforeDict["2"]

var key = {firstName: "Marcin"};
beforeDict[key]; //becomes beforeDict["[object Object]"]
```
    
I am quite surprised TypeScript does not do anything to help to avoid such pitfalls.

Included in this pull request is a fix and test case.