Give zig, rust, go_win and go_xcaddy a small consistent surface for
locating the install directory and a binary inside it:
- path(): install/extract root for the artifact
- binary($name = '<default>'): full path to a binary under that root,
picking the artifact's natural layout (top-level for zig, bin/ for
rust and the go toolchains)
- isInstalled(): is the default binary present on disk
Callers that previously concatenated PKG_ROOT_PATH . '/zig/zig' (and
the equivalents for the other artifacts) by hand can call the helpers
instead, and any later code that needs to ask "is this toolchain
available" can use isInstalled() without rebuilding the path.
Switch the rust and go_win downloaders from baking PKG_ROOT_PATH into
the extract path at download time to the {pkg_root_path} template,
which ArtifactExtractor resolves at extract time. This keeps the path
stable across runs where pkg_root_path differs between download and
extract (e.g. containerised vs host builds).