Rework fetch_bytes and _fetch_pypi_json patches to make testing easier. Various improvements to test_micropip. The main feature is a new fixture
'mock_fetch' with an add_pkg method that takes a package name, a map
from version to requirements, and a choice of platform. This should
hopefully make writing more tests a lot easier (which is good because
we could use more micropip test coverage but we are limited by the
difficulty of writing good tests).

This also adds a fixture to create distinct dummy package names and
enables @pytest.mark.asyncio to handle the async calls rather than
using `asyncio.get_event_loop.run_until_complete`.
// The point is to make a file that works with JavaScript analysis tools like
// JsDoc and LGTM. They want to parse the file as JavaScript. Thus, it's key
// that included js files should parse as valid JavaScript. `JS_FILE` is a
// specially designed macro to allow us to do this. We need to look like a
// function call to JavaScript parsers. The easiest way to get it to parse is to
// make the macro argument look like a JavaScript anonymous function, which we
// do with `()=>{`. However, `()=>{` is an invalid C string so the macro needs
// to remove it. We put `()=>{0,0;`, JS_FILE removes everything up to
// the comma and replace it with a single open brace.
//

#define UNPAIRED_OPEN_BRACE {
#define UNPAIRED_CLOSE_BRACE } // Just here to help text editors pair braces up
#define JS_FILE(func_name, a, args...)                                         \
  EM_JS_NUM(                                                                   \
    int, func_name, (), UNPAIRED_OPEN_BRACE { args return 0; })

// A macro to allow us to add code that is only intended to influence JsDoc
// output, but shouldn't end up in generated code.
#define FOR_JSDOC_ONLY(x)

// The point is to make a file that works with JavaScript analysis tools like
// JsDoc and LGTM. They want to parse the file as JavaScript. Thus, it's key
// that included js files should parse as valid JavaScript. `JS_FILE` is a
// specially designed macro to allow us to do this. We need to look like a
// function call to JavaScript parsers. The easiest way to get it to parse is to
// make the macro argument look like a JavaScript anonymous function, which we
// do with `()=>{`. However, `()=>{` is an invalid C string so the macro needs
// to remove it. We put `()=>{0,0;`, JS_FILE removes everything up to
// the comma and replace it with a single open brace.
//

#define UNPAIRED_OPEN_BRACE {
#define UNPAIRED_CLOSE_BRACE } // Just here to help text editors pair braces up
#define JS_FILE(func_name, a, args...)                                         \
  EM_JS_NUM(                                                                   \
    int, func_name, (), UNPAIRED_OPEN_BRACE { args return 0; })

// A macro to allow us to add code that is only intended to influence JsDoc
// output, but shouldn't end up in generated code.
#define FOR_JSDOC_ONLY(x)
