fix(env): port env/printenv with host-env-leak guard
Adds env(1) and printenv(1) ported from just-bash with GNU coreutils
semantics: exit 125 on bad invocation, exit 127 on command-not-found,
inner exit propagation otherwise; --help to stdout; lone "-" treated
as -i.
The readonly-vs-exported filter on the -i unset list is the
load-bearing bit. Iterating ec.Environ.Each in production picks up
mvdan's readonly shell scalars (EUID, UID, GID), and emitting `unset`
for them produces "EUID: readonly variable" stderr noise on every
`env -i` call. It also has no effect, since readonly shell vars are
not in the exported environ a child would inherit. Restricting the
unset list to set, exported, non-readonly scalars is what makes
`env -i` quiet and correct against a runner that pulls os.Environ().
A regression test (TestEnv_IgnoreEnv_ProductionRunner) builds the
runner the same way cmd/kefka/main.go does, with no interp.Env
override, so the host environment is genuinely present and the
filter actually has to do its job.
Assisted-by: Claude Opus 4.7 via Claude Code
Signed-off-by: Xe Iaso <me@xeiaso.net>