better 404 handling

just realized our current 404 handling is terrible. right now you have to do `if (this.status == 200 && this.body == null)`, which is really annoying and doesn't make sense at all. 

you now either have to set `this.status` or  `this.body`, which will automatically set the status code to `200` if not already set. so now you can just do `if (this.status)` to check whether has been "handled".

this is a backwards compatibility breaking change but IMO makes much more sense. this also drops support for `this.res.statusCode = `, which people shouldn't be doing anyways.

now, a 404 handler will look like this:

```js
app.use(function* pagenotfound(next){
  yield next;
  if (this.status) return;
  this.status = 404;
  this.body = 'page not found';
})
```

which makes much more sense than the monstrosity we had before.

i just fixed the tests so that it works. i'll add more if you're okay with it.