We want to prevent mistaken changes that do something like this:
```ts
foo.onEvent = () => { ... };
```
When they almost always mean:
```ts
foo.onEvent(() => { ... })
```
Adds new eslint rule which requires `export` be used for public api types
The `export` is not actually needed, but our existing typing files largely use it. This makes it consistent
* get children when node expands
* switch to asynchronous tree for more natural lazy loading
* store variables by ID so we can look up the correct instance