kernel - Fix lockmgr LK_UPGRADE bug

* Fix a bug in the LK_UPGRADE sequencing.  If an LKC_UPREQ owner is present
  and releasing the shared lock would release the lock, the UPREQ owner must
  be granted the exclusive lock right then and there.
kernel - Performance tuning

* Use a shared lock in the exec*() code, open, close, chdir, fchdir,
  access, stat, and readlink.

* Adjust nlookup() to allow the last namecache record in a path to be
  locked shared if it is already resolved, and the caller requests it.

* Remove nearly all global locks from critical dsched paths.  Defer
  creation of the tdio until an I/O actually occurs (huge savings in
  the fork/exit paths).

* Improves fork/exec concurrency on monster of static binaries from
  14200/sec to 55000/sec+.  For dynamic binaries improve from around
  2500/sec to 9000/sec or so (48 cores fork/exec'ing different dynamic
  binaries).  For the same dynamic binary it's more around 5000/sec or
  so.

  Lots of issues here including the fact that all dynamic binaries load
  many shared resources, even hen the binaries are different programs.
  AKA libc.so.X and ld-elf.so.2, as well as /dev/urandom (from libc),
  and access numerous common path elements.

  Nearly all of these paths are now non-contending.  The major remaining
  contention is in per-vm_page/PMAP manipulation.  This is per-page and
  concurrent execs of the same program tend to pipeline so it isn't a
  big problem.