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.
hammer2 - Add 'snapshot' directive

* Add the snapshot directive, which by default snapshots the current
  directory or the specified directory.

  A label is optional.  If not specified the PFS name prefix and a timecode
  postfix is constructed.  Snapshots are created in the super-root, so use
  pfs-list to list them along with any discrete PFS's.

* Fix the pfs-delete directive.

* Subdirectories of the H2 mount can be snapshotted with the caveat that
  hardlinks which cross above the snapshot directory will not be in the
  snapshot (have lookup failures when accessed via the snapshot).