fix gcLoop: silently exited after one tick
gcLoop was using io.sleep on pool_io (Threaded) from a plain std.Thread.
the first tick happened to succeed, the second hit an error path, and
catch return swallowed it — silently killing the loop. one malloc_trim
fired at the 10-min mark and then nothing for 13.5+ hours.
fix: switch to std.c.nanosleep directly. plain threads can't safely
call into Io scheduler primitives, even on the matching backend, because
they aren't registered with that backend's scheduler.
drop the io parameter from gcLoop since dp.gc() uses its own bound io
internally.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>