function *(next) middleware signature

wooo! if we merge this, middleware signature would be:

```js
app.use(function *(next) {
  // do stuff
  yield next();
  // do stuff
})
```

if you want to delegate middleware, you would have to do:

```js
app.use(function *(next) {
  if (true) yield fn.call(this, next);
})
```

we could add a context helper or do `next(fn)`. 

it _kind_ of has an error check when there are double `next()`s. it will also work only if you do `yield next();`, not `return next()` or `yield next`, which is more strict than before, a good thing.

this is much more elegant than the other versions we tried. plus, i didn't like special casing `'next'`. it's also easier to use:

```js
co.call(ctx, compose(app.middleware))(ctx.onerror);
```

(unless you want to memoize the composition, which i would prefer).