The new JSPI does not require wasm type reflection, so it's possible that JS runtimes will have JSPI support but no type reflection, for instance if they are enrolled in the JSPI origin trial or have the JSPI flag on but not the type reflection flag.
If type reflection is missing, we fall back to attempting to instantiate a dummy module that imports a function with a given signature. This will raise a LinkerError if the signature is wrong. By trying all four possibilities, we learn the actual signature of the function.
Buster isn't available for anymore for Python 312 so we have to update.
This also updates to Python 3.11.7, which turns out to be relatively invasive. I broadly
xfailed failing tests in `python_tests.yaml` since we'll upgrade to Python 3.12 soon anyways.
I also reordered prettier to come last since it's the slowest. I switched from
using black to ruff-format which says its defaults are nearly the same as black.
Adds two devcontainer configurations:
* configuration "Docker": the default, equivalent to using run_docker
* configuration "Conda"
Codespaces and VS Code allow users to select the configuration.