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 clears #1340 

---

~~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.~~
Sorry, I have not been able to be more responsive on this one. (I'll continue to be sporadic for one more week)

Here we just need a global. The `this` inside modules is a different issue.

My suggestion is that this line (272) we only pass in `this`. Then at the top of the IIFE we can do something like:

```js
(function(maybeGlobal) {
  'use strict';
  var g;
  if (maybeGlobal.Array === Array) {
    g = maybeGlobal;
  } else if (typeof window !== 'undefined' && window.Array === Array) {
    g = window;
  } else if ( same with global) {
   ...
  } else if ( same with self) {
  } else {
   throw no global!
  }
  ...
})(this);
```

We probably want to move this to $traceurRuntime (or at least move it to runtime.js).

Does that make sense?