Move some IO-focused classes that don't have deps on other parts of Bazel to the new lib/io package.

Also, couldn't resist some clean-ups on Abstract(File)ChainUniquenessFunction: was only used for RootedPath, so specialized to that, and streamlined the uniquifier a bit, hopefully without any bugs that our test battery won't catch.

I did debate truly uniquifying the cycle by breaking ties based on the next element, but managed to back away.

PiperOrigin-RevId: 363756543
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/GlobFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/GlobFunction.java
index 4fd7369..9f3c88e 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/GlobFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/GlobFunction.java
@@ -22,6 +22,8 @@
 import com.google.devtools.build.lib.cmdline.RepositoryName;
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
 import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
+import com.google.devtools.build.lib.io.FileSymlinkInfiniteExpansionException;
+import com.google.devtools.build.lib.io.FileSymlinkInfiniteExpansionUniquenessFunction;
 import com.google.devtools.build.lib.io.InconsistentFilesystemException;
 import com.google.devtools.build.lib.vfs.Dirent;
 import com.google.devtools.build.lib.vfs.PathFragment;