MJS build has different shape than non-MJS build
I'm using Typescript for my project with Webpack 5 to compile.

Typescript uses the definitions from `@types/koa`, which currently represent the non-MJS build, which has the equivalent of `module.exports = class Koa {...}`. This is represented in the TS declaration as the equivalent of `export = Koa`.

The MJS build, however, exports `Koa` as `default`. The TS definition for this would be `export default Koa`.

When importing Koa with `import * as Koa from 'koa';` (which is the only way allowed without `esModuleInterop` enabled), Typescript believes that `Koa` is the constructor. However, the constructor is actually `Koa.default` because the `import` statement switches to the MJS build.

I currently work around this by doing the following in my code:

```typescript
import * as Koa from 'koa';

function resolve<T>(module: T): T {
  let x = module as any;
  if (x.default) {
    x = x.default;
  }
  return x;
}

const app = new (resolve(Koa))();
```

Obviously this isn't great, but short of disabling MJS support, it's the best I can do for now.

The underlying issue here is that the MJS support introduced by #1474 was a backwards-incompatible change for folks using an import-aware bundler like Webpack. The mismatch between the type definitions (which are explicit that `import Koa from 'koa';` will not work) and the MJS export (where only the default export is set) causes a problem which can only be detected at runtime or in tests.

The fix which seems most apparent to me is two parts:
1. Add a `default` export to the non-MJS build
2. Update the type definitions to remove the `export = ` export and force folks over to the default export, ensuring that the typechecker will catch these issues immediately rather than at CI/runtime.
