Can't we just get rid of `listeners = state.slice()` and just iterate over state?
```
  let listeners = observers(target, type);
  ...
  try {
    let listener = listeners[index];
    if (listener)
      yield listener.apply(target, args);
  } catch(e) {
    ...
  }
```
It would have even be easier to use listeners.forEach if we weren't using yield.