Reduce for-in boilerplate by making Context#keys return an iterator

With these changes, a for-in loop like this:
```js
before();
for (var key in obj) {
  inside(key);
}
after();
```
now generates code like this:
```js
  before();
  $ctx17.t13 = $ctx17.keys(obj);
case 3:
  if (($ctx17.t14 = $ctx17.t13()).done) {
    $ctx17.next = 8;
    break;
  }
  key = $ctx17.t14.value;
  inside(key);
  $ctx17.next = 3;
  break;
case 8:
  after();
```
cc @amasad @qfox