sandbox-bench: collapse to a single detached execution primitive
Retrying an execution is only sound if the command is idempotent and the
dropped stream really killed the remote side; retrying a read is always
sound. So make runDetached the only way to execute: exactly-once nohup'd
scripts, with the stream used solely for kicks and polls. Deletes sbExec
and sbExecRetry, folds the java install into the react-snap script (the
VM user has passwordless sudo), and replaces sandbox-gate's private
copies of runDetached and ensureReactBuildSnapshot with the shared ones,
moving the gate's same-lockfile memoization into the shared
implementation.