initialize `context.state` sooner
# Expected Behavior

If there's information I want to be available in every request, I'd like to be able to specify that information when I initialize the app, using `app.context.state`, like so:

```js
const app = new Koa()
app.context.state.prop = true // TypeError: Cannot set properties of undefined (setting 'prop')
app.use(ctx => console.log(ctx.state.prop))
```

Best practice for Koa is to use `context.state` to pass information through middleware, and to use `app.context` add properties used throughout the app, so this seems like the right approach. It's also parallel to the way that I can set `app.locals` in an Express app to make that information available to `res.locals`.

# Actual Behavior

The above code snippet throws a TypeError because `context.state` isn't initialized until the app receives a request, here:

https://github.com/koajs/koa/blob/aa816ca523e0f7f3ca7623163762a2e63a7b0ee3/lib/application.js#L168-L181

The following also doesn't work, because the `state` property gets overridden by the code linked above:

```js
const app = new Koa()
app.context.state = { prop: true }
app.use(ctx => console.log(ctx.state.prop)) // returns undefined
```

# Suggested Solution

Add the `state` property to the [context prototype](https://github.com/koajs/koa/blob/master/lib/context.js) instead of initializing it when a request comes in. Then, in `app.createContext()`, create a new `state` object that only lives for the lifetime of the request, using `app.context.state` as its prototype.

Replace:

https://github.com/koajs/koa/blob/aa816ca523e0f7f3ca7623163762a2e63a7b0ee3/lib/application.js#L179

with:

```js
// context.state = Object.assign({}, context.state) // <- old suggestion
context.state = Object.create(context.state)        // <- this is probably better
```

# Workaround

The workaround is to add the information directly to `app.context` rather than `app.context.state`. However, this is undesirable because it goes against the best practice of using `context.state` to encapsulate state.

```js
const app = new Koa()
app.context.prop = true
app.use(ctx => console.log(ctx.prop)) // returns true
```

I'd be happy to open a PR for this if it's a change you'd like implemented.