kernel - Add frontend cache for cache_findmount()
* When a name lookup crosses a mount point boundary it must call
cache_findmount() to locate the mount linkage. This linkage is
not stored in the vp or ncp because there is a 1:N relationship
between vp/ncp and possible mounts due to DragonFly's ability
to do arbitrary nullfs mounts in the topology.
* The mountlist scan requires an exclusive token to deal with ripouts
during the scan. This creates a bottleneck when highly parallel
filesystem operations are being run on the machine and use mount-crossing
paths or absolute paths.
* The frontend cache is able to use a shared spinlock for the fast path,
and implements a simple non-chained linear array hashed by pointer
values.