Update to esbuild v0.22
This is a major bump due to a couple of breaking changes. The only one that affects us is the bump from Node 12 to Node 18 due to the binaries being built with newer Go (https://github.com/evanw/esbuild/issues/3802). This is a problem because we still build/test on Node 14.
We could split the build so that we build on the latest Node, then switch to older Node for testing, but that will require quite a bit of hackery in our build scripts to split these apart, when the original design was to be simple.
~For now, just hack the missing API back onto Node's crypto module with the same call that Go used to have before they started requiring Node 18. Curiously, things don't break when I don't apply this hack, so it's possible that the APIs in question are simply not called in the code paths we use. But I've seen it break in: https://github.com/evanw/esbuild/actions/runs/9672521120/job/26684967350~
Hopefully esbuild doesn't actually start using newer syntax, though. They are well within their rights to, of course, at which point I'll have to add some mechanism to our build like --only-build and --no-build to be able to split into two stages for continued testing.
The above was mostly wrong, I don't know why I thought the wasm change mattered. We just use the regular API which just uses regular binaries.