Runtime helper for async*

Do we need a subclass of StreamController?  The StreamController constructor is already parameterized over all the callbacks.  Couldn't we make the `async*` function boilerplate look something like:

```
var resume, isCanceled = false, controller;
controller = new StreamController(onListen: () {
  // translation of body
}, onResume: () { resume(); }, onCancel () {
  isCanceled = true;
  return controller.close();
});
return controller.stream;
```

That is, make all the state be in the translation of the `async*` function?  I guess the class might be cleaner for a human reader, but then we run into the question of where to put it.  (Not dart:async, we don't want to rely on a package in the translated program if we don't have to, etc.).