This PR does two things:

1. I moved `package.json` into the root directory. Why? We are using `npx` from the `Makefile` which is executing usually under the root directory. If we install `node_modules` in `src/js` then these invocations don't see `node_modules` and install an extra copy of the packages. So we want `node_modules` in the root directory. node wants to put `node_modules` in the same directory as `package.json` hence I moved `package.json`. I also updated the build rules so that any recipe that uses `npx` has a dependency on `node_modules/.installed`.
2. We invoke `file_packager.py` from both the Makefile (in two places) and from `build_pkg`. There has been some drift in which options are applied in the two places. I extracted the common options and the task of locating the `file_packager.py` script into `tools/file_packager.sh`. I also shortened the make rules for `distutils.data` and `test.data` and made some minor updates to the dev docs about `file_packager.py`.
MAINT Improvements to node and file_packager invocations. This PR does two things:

1. I moved `package.json` into the root directory. Why? We are using `npx` from the `Makefile` which is executing usually under the root directory. If we install `node_modules` in `src/js` then these invocations don't see `node_modules` and install an extra copy of the packages. So we want `node_modules` in the root directory. node wants to put `node_modules` in the same directory as `package.json` hence I moved `package.json`. I also updated the build rules so that any recipe that uses `npx` has a dependency on `node_modules/.installed`.
2. We invoke `file_packager.py` from both the Makefile (in two places) and from `build_pkg`. There has been some drift in which options are applied in the two places. I extracted the common options and the task of locating the `file_packager.py` script into `tools/file_packager.sh`. I also shortened the make rules for `distutils.data` and `test.data` and made some minor updates to the dev docs about `file_packager.py`.
from ._base import open_url, eval_code, eval_code_async, find_imports, CodeRunner
from ._core import JsProxy, JsException, create_once_callable, create_proxy, to_js  # type: ignore
from ._importhooks import jsfinder
from .webloop import WebLoopPolicy
from . import _state  # type: ignore # noqa
import asyncio
import sys
import platform

sys.meta_path.append(jsfinder)  # type: ignore
register_js_module = jsfinder.register_js_module
unregister_js_module = jsfinder.unregister_js_module

if platform.system() == "Emscripten":
    asyncio.set_event_loop_policy(WebLoopPolicy())


__version__ = "0.18.0dev0"

__all__ = [
    "open_url",
    "eval_code",
    "eval_code_async",
    "CodeRunner",
    "find_imports",
    "JsProxy",
    "JsException",
    "to_js",
    "register_js_module",
    "unregister_js_module",
    "create_once_callable",
    "create_proxy",
]

from ._base import open_url, eval_code, eval_code_async, find_imports, CodeRunner
from ._core import JsProxy, JsException, create_once_callable, create_proxy, to_js  # type: ignore
from ._importhooks import jsfinder
from .webloop import WebLoopPolicy
from . import _state  # type: ignore # noqa
import asyncio
import sys
import platform

sys.meta_path.append(jsfinder)  # type: ignore
register_js_module = jsfinder.register_js_module
unregister_js_module = jsfinder.unregister_js_module

if platform.system() == "Emscripten":
    asyncio.set_event_loop_policy(WebLoopPolicy())


__version__ = "0.18.0dev0"

__all__ = [
    "open_url",
    "eval_code",
    "eval_code_async",
    "CodeRunner",
    "find_imports",
    "JsProxy",
    "JsException",
    "to_js",
    "register_js_module",
    "unregister_js_module",
    "create_once_callable",
    "create_proxy",
]
