zfs_vnode_forget: dispose of larvae vnode using public vfs api (mostly)
[bugfix] opensolaris compat: clear VI_MOUNT before returning if mount_snapshot fails
zfs_umount: no need to set MNTK_UNMOUNTF here, dounmount handles that
zfsctl_snapdir_lookup: obtain a snapname in the remount case

... which is triggered if somebody did regular umount on a snapshot mount.
zfs: zfs is mpsafe, no need to muck with VFS_LOCK_GIANT
zfs_vnode_lock: no need to double-guess caller's intentions here

vn_lock should do the right thing with respect to given vnode lock flags.
If a caller doesn't mind a doomed vnode, then zfs should deliver.
zfs_fhtovp: there is no reason to amend locks flags with LK_RETRY here
opensolaris_lookup: use vfs_busy in traverse before calling VFS_ROOT

... to ensure that we have a valid mountpoint during the call.
zfs: overhaul zfs-vfs glue for vnode life-cycle management

* There is no need for the delayed destruction of znodes via taskqueue,
now that we do not need to fear recursion from getnewvnode into
zfs_inactive and zfs_freebsd_reclaim, thus making znode/vnode state
machine a bit simpler.

* More complete porting of zfs_inactive from Solaris VFS model to FreeBSD
vop_inactive and vop_reclaim model.  All destructive actions are done
in zfs_freebsd_reclaim.
This llows to simplify zfs_zget logic.

* Clean up Solaris-isms like bailing out of reclaim/inactive on certain
values of v_usecount (aka v_count) or directly messing with this counter.

* Do not clear z_vnode while znode is still accessible.
z_vnode should be cleared only after zfs_znode_dmu_fini.
Otherwise zfs_zget may get an effectively half-deconstructed znode.
This allows to simplify zfs_zget logic further.

* Re-implement unmounting logic:
Do not create any backdoor in zfs_root just to make vflush happy;
instead, deal with the root vnode directly.
Do force-unmount vflush-ing in two stages: first gracefully deal with
inactive vnodes, then stop all vnode and vfs operations, invalidate all
vnodes, set z_unmounted and then finally do forceful vflush.
This ensures that there can not be any vnode or vfs operations when
vnodes are force-reclaimed and thus no chance of getting a znode
with invalid z_vnode from zfs_zget.
In zfs_zget we now use VV_FORCEINSMQ - it's only needed for the zil_close
case during unmount, so that znodes could be created if necessary,
but for now we set it unconditionally.
This allows final zil_commit actions from zil_close to succeed.

Maybe to do: pass locking flags parameter to zfs_zget, so that the zfs-vfs
glue code doesn't have to re-lock a vnode but could ask for proper locking
from the very start.
Another parameter to control VV_FORCEINSMQ could useful too.
ffs_vgetf seems like a good source of inspiration.
multiple changes to solaris vfs/gfs compat code and zfs ctldir handling

- zfs ctldir / gfs: port solaris inactive to our inactive+reclaim
- remove an incorrectly ported Solaris-ism
- traverse now expects the starting node be locked and referenced
- traverse now uses vfs_busy to avoid races in VFS_ROOT
- mount_snapshot now expects the covered vnode to be locked and referenced,
  it releases the lock but keepts the reference as dounmount will drop it
- gfs_dir_lookup/gfs_vop_lookup always return a resulting vnode locked,
  the 'flags' parameter is re-purposed for lock flags, which are always
  obeyed; e.g. a doomed vnode can not be returned unless LK_RETRY is
  specified
- the ctldir code is made conforming to the above changes
- the lookups are made to honor cn_lkflags
- care is taken to handle the doomed vnodes properly