ctx.throw doesn’t set ctx.status
I stumbled upon this issue when trying to throw an `Unauthorized` error like:

``` javascript
   ...,
  async (ctx, next) => {
    if (!ctx.state.user) {
      ctx.throw(401, 'Unauthorized');
    }
    ctx.state.payload.user = ctx.state.user;
    return await next();
  }
  ...
```

The response’ status code always was 404. According to [Koa docs](https://github.com/koajs/koa/blob/v2.x/docs/api/context.md#ctxthrowmsg-status-properties) the use of `ctx.throw` above is equivalent to:

``` javascript
   ...,
  async (ctx, next) => {
    if (!ctx.state.user) {
      ctx.status = 401;
      throw new Error('Unauthorized');
    }
    ctx.state.payload.user = ctx.state.user;
    return await next();
  }
  ...
```

But it isn’t. Setting status first and then throwing an error results in a correct `401 Unauthorized` response as expected while using `ctx.throw` doesn’t.

Looking at the relevant [code](https://github.com/koajs/koa/blob/2.0.0/lib/context.js#L90-L92) there is just an `http-error` created and thrown but nothing indicates that `ctx.status` is being set.

``` javascript
  throw() {
    throw createError.apply(null, arguments);
  },
```

So it seems the response comes with status overridden by Koa’s default 404, no matter what status code you pass to `ctx.throw`.
