Add BuildArgs to store common build arguments . ### Description

This renames `ReplayArgs` in pywasmcross to `BuildArgs` and uses it in buildall and buildpkg. No functional changes are involved except for some modifications in function parameters and how logs are copied after the build.

This PR makes it easier to call methods in buildall and buildpkg from the new CLI.

### Checklists

- [x] Add / update tests

import pytest
from pytest_pyodide import run_in_pyodide


@pytest.mark.driver_timeout(40)
@run_in_pyodide(packages=["scipy", "sparseqr"])
def test_scipy_linalg(selenium):
    import numpy
    import scipy.sparse.linalg
    import sparseqr
    from numpy.testing import assert_allclose

    # QR decompose a sparse matrix M such that  Q R = M E

    n_test = 10
    #
    M = scipy.sparse.rand(n_test, n_test, density=0.1)
    Q, R, E, rank = sparseqr.qr(M)
    # print( abs( Q*R - M*sparseqr.permutation_vector_to_matrix(E) ).sum() )  # should be approximately zero

    for ib in range(n_test):

        b = numpy.zeros(10)
        b[ib] = 1

        v = Q.dot(R.dot(b))
        w = M.dot(sparseqr.permutation_vector_to_matrix(E).dot(b))

        assert_allclose(v, w, rtol=1e-07, atol=1e-9)

import pytest
from pytest_pyodide import run_in_pyodide


@pytest.mark.driver_timeout(40)
@run_in_pyodide(packages=["scipy", "sparseqr"])
def test_scipy_linalg(selenium):
    import numpy
    import scipy.sparse.linalg
    import sparseqr
    from numpy.testing import assert_allclose

    # QR decompose a sparse matrix M such that  Q R = M E

    n_test = 10
    #
    M = scipy.sparse.rand(n_test, n_test, density=0.1)
    Q, R, E, rank = sparseqr.qr(M)
    # print( abs( Q*R - M*sparseqr.permutation_vector_to_matrix(E) ).sum() )  # should be approximately zero

    for ib in range(n_test):

        b = numpy.zeros(10)
        b[ib] = 1

        v = Q.dot(R.dot(b))
        w = M.dot(sparseqr.permutation_vector_to_matrix(E).dot(b))

        assert_allclose(v, w, rtol=1e-07, atol=1e-9)
