Io improvements

Traversing the entire FS is fine, but it doesn't seem sensible to do that by buffering an arbitrarily large directory listing in memory, and taking an arbitrarily long time before doing any useful work (especially as this only exacerbates race conditions).