hammer2 - flush sequencing part 3 - add snapshots
* Basic snapshot creation currently uses a duplicate/create sequence
to duplicate the directory being snapshotted, with caveats listed in
the TODO.
Snapshotting the mount point works as expected though work needs to be
done on the flushing. Snapshotting a subdirectory works with some
issues (hardlinks which span above the parent directory will not be
snapshotted).
* Add the PFS_SNAPSHOT ioctl for writable snapshot creation.
* Adjust the PFS_GET ioctl to support retrieval of the PFS specific to
the file descriptor.
* Implement PFS deletion and augment the unlink code to allow non-empty
snapshots to be deleted.
* Add restricted flushing to support flushing the snapshot concurrent to
modifying operations occurring during the snapshot flush. Untested.