support environments with both window and global

Such environments include [node-webkit](https://github.com/rogerwang/node-webkit) and [atom-shell](https://github.com/atom/atom-shell).

This breaks the following tests within test/unit/node/generated-code-dependencies.js:
* `test('class'`
* `test('generator'`
* `test('generator (symbols)'`
* `test('compiled modules'`
* `test('compiled modules inline'`
* `test('compiled modules mix inline & script'`

I have not yet investigated the `child_process.exec()` based tests, however the `vm.runInNewContext()` tests have an issue with `global` within indirect `eval()`s. It gets pretty deep and difficult to debug. I am still working on this, but any help would be appreciated.
I guess that `global` is not defined in the sandbox VM. So you pass `undefined` to these functions and then you get the exception in your tests. The original code passes `this` which is `global` and things work out.

Here is another form:

`(typeof global !== 'undefined' ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : this);`