refactor(command): plumb shell runner through ExecContext
ExecContext now carries the active *interp.Runner, so commands that
need to dispatch a child argv (currently just `time`) can call
Runner.Subshell() and re-enter the shell's exec-handler chain instead
of poking at the registry directly. This lets `time CMD` reach shell
functions, aliases, and PATH binaries the same way the user would
have invoked CMD on its own.
`time.Impl` no longer holds a `Registry`; it shell-quotes the inner
argv, parses it as bash, and runs it through a subshell of ec.Runner.
Tests now build a runner whose ExecHandler dispatches into the test
registry. The not-found message moves from "time: NAME: command not
found" to the registry's "kefka: command not found: NAME"; tests
were loosened to match.
Signed-off-by: Xe Iaso <me@xeiaso.net>
Assisted-by: Claude Opus 4.7 via Claude Code
Signed-off-by: Xe Iaso <me@xeiaso.net>