Rust doesn't have TCO and this uses more memory and risks a stack overflow. We should be dropping unused PathData when we are done with it.
In another PR, I've reduced the PathData size by more than a kilobyte, but master branch's version is a porker and these allocations are probably slowing down ls.
This is also the first step to concurrent directory search.