Implemented web testing
This replaces Karma with Playwright. The implementation is a little
lower-level than Karma was but it has the benefit of running our ESM files
directly in the browser with no modification by bundlers.
There's a manual mode (npm run test manual) that allows you to open a link
to run tests directly in the browser.
The reporter is shared between browser, ESM and CJS tests so everything feels
very uniform.