Add WebGPU Emscripten platform/driver/samples.
Rollup of fixes (some simple, a few hacky as we figure out whether we want to continue supporting native WebGPU platforms), then the actual Emscripten platform code and samples.
The sample is forked from experimental/web/sample_dynamic/, but does not use Web Workers or enable threading in the build.
Both the new sample and the tests at experimental/web/testing/ can successfully create WebGPU devices using Emscripten on my machine/browser (Chrome Canary on Windows with #enable-unsafe-webgpu). The sample and tests don't get much further than device creation yet (builtin shaders need work, for example).
The tests make use of Asyncify to implement synchronous versions of wgpuInstanceRequestAdapter and wgpuAdapterRequestDevice, while the sample preinitializes a WGPUDevice in JS then passes it in via Emscripten's preinitializedWebGPUDevice/emscripten_webgpu_get_device(). There are a few other ways we can set that up - we'll definitely want to disable Asyncify for shipping application code.