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);
})
```

it _kind_ of has an error 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.