Merge pyodide_py into python_stdlib.zip. ### Description

Merges pyodide_py.tar into python_stdlib.zip. This reduces the number of network requests during the initialization.

The original intention of splitting pyodide_py.tar from pyodide.asm.data was to give users an option to provide custom files (#2023), which is now available by modifying python_stdlib.zip directly. So I think there is no reason to have both python_stdlib.zip and pyodide_py.tar.

### Checklists

- [x] Add a [CHANGELOG](https://github.com/pyodide/pyodide/blob/main/docs/project/changelog.md) entry
- [x] Add / update tests

from pytest_pyodide import run_in_pyodide


@run_in_pyodide(packages=["lazy-object-proxy"])
def test_lazy_object_proxy(selenium):
    import lazy_object_proxy

    def expensive_func():
        from time import sleep

        print("starting calculation")
        # just as example for a slow computation
        sleep(0.1)
        print("finished calculation")
        # return the result of the calculation
        return 10

    obj = lazy_object_proxy.Proxy(expensive_func)
    # function is called only when object is actually used
    assert obj == 10  # now expensive_func is called

    assert obj == 10  # the result without calling the expensive_func

from pytest_pyodide import run_in_pyodide


@run_in_pyodide(packages=["lazy-object-proxy"])
def test_lazy_object_proxy(selenium):
    import lazy_object_proxy

    def expensive_func():
        from time import sleep

        print("starting calculation")
        # just as example for a slow computation
        sleep(0.1)
        print("finished calculation")
        # return the result of the calculation
        return 10

    obj = lazy_object_proxy.Proxy(expensive_func)
    # function is called only when object is actually used
    assert obj == 10  # now expensive_func is called

    assert obj == 10  # the result without calling the expensive_func
