Fixed lock-order reversal between sock lock and inp lock when setting
l2info on a socket.

The sock lock was being held by sosetopt() across the call to
ip_ctloutput(), which acquires the inp lock, now out-of-order.  This
tends to show up when the l2info is being set on a freshly accepted
socket while segments for that socket are being processed by
tcp_input() - when tcp_input() tries to acquire the receive sockbuf
lock while holding the inp lock, deadlock ensues, as the sock lock and
the receive sockbuf lock are currently one and the same.
Fix inbound VLAN tag mask selection bug.  listens on specific VLAN tag
stacks were affected by this.
Add missing consts and make room for type translation in setl2info.
Make optval pointer const in so_setsockopt() and cast away const-ness
internally.  This is consistent with how the userland setsockopt()
works.
Max number of CPUs.
Merge remote-tracking branch 'upstream/master' into passive_receive_adrian
Add kdb definitions for use when witness and other debugging options
are enabled.
WITNESS assumes GIANT is held and will unlock/relock it during startup.

So, just wrap all of the early SYSINIT linker set stuff in GIANT.
Expose a stack unwind function function that uses libunwind.
It'll be a no-op unless UINET_STACK_UNWIND is defined.
Add a subr_stack.c stub that uses the uinet host interface to expose
the stack unwinding provided by the host environment.
Add panicstr - required by WITNESS and other things that call panic().
Add rmlock debug function methods.
sprinkle WITNESS lines appropriate throughout rwlock.
* Add mutex WITNESS bits
* Add stubs for spinlocks in case they're used - WITNESS requires that
  the class at least be totally setup.
* Make witness compile!
* Make panic() into WITNESS_PANIC() - and make it just print, rather than
  constantly panic
* Some of the initial locks aren't really sx locks - the libuinet code
  implements them using mutexes.  So it confuses things.
* Don't use the interrupt disable/enable code here - instead, just pray
  that the per-thread data won't change in a nasty way.

This seems to work under userspace but only for sleep locks - spinlocks
use pcpu data and libuinet absolutely doesn't implement the same semantics
for pcpu stuff.
Add a blank witness option file.
Add placeholders for witness.