fsutils: Add two small APIs for opendirat()

We already had gs_file_open_dir_fd, but it didn't support O_NOFOLLOW,
which is quite useful.

Also add a raw function wrapping the core bits we need to opendir(),
also taking a follow boolean.
fileutil: Add new API to iterate over a directory with *at system calls

Using the GFileEnumerator doesn't allow using the *at system calls
such as unlinkat() very easily.  These system calls are both more
performant (no need to traverse paths repeatedly) and more secure
(assuming an attacker has write access to an intervening path).

Currently, this exposes the Unix "struct dirent*" which means it's not
available to introspection, but a future API addition could add a
binding to create a GFileInfo*.
shutil: Change rm_rf() to use new GSDirFdIterator, and add *at variant

This noticeably cleans up the rm_rf() code.  And also it now becomes
easy add a gs_shutil_rm_rf_at() variant.