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

With these changes, a for-in loop like this:

  before();
  for (var key in obj) {
    inside();
  }
  after();

now generates code like this:

    before();
    $ctx17.t13 = $ctx17.keys(obj);
  case 3:
    if (($ctx17.t14 = $ctx17.t13.next()).done) {
      $ctx17.next = 11;
      break;
    }
    key = $ctx17.t14.value;
    inside();
    $ctx17.next = 3;
    break;
  case 11:
    after();
Make Context#keys return a function instead of an iterator-like object.

Since these are all implementation details, we don't have to return an
actual iterator object (which would normally have a next method). Instead
we return the next method directly, saving an object.
Add a test of for-in loops with risky sequence expressions on the right.
Merge pull request #95 from facebook/reduce-for-in-boilerplate

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