Add encode and decode support for snapshot fh

The snapshot file handle should provide enough info in order to get the right
objsetid and right object in the objset defined by objsetid. Therefore
we encode the snapshot fh as objsetid + inode.

The objsetid should be encoded for every snapshot dentry including root dentry;
for snapshot root dentry zf_gen should be 0.

To decode a snapshot fh, we simply extract the objsetid and the inode,
then we try to retrive the super block stored in the snapentry. Zero matching
snapentry means the snapshot is not mounted. In this case we try to
trigger a automount of the snapshot by doing a lookup_one_len on the snapshot
directory, and then try again.

If zf_gen is 0, we return the snapshot root dentry.

Also added a configure check for kern_path, since it is not available
in earlier kernels.

Signed-off-by: Andrey Vesnovaty <andrey.vesnovaty@gmail.com>
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>