kernel - Add lock canceling features

* The current (typically exclusive) lock holder can enable cancel mode
  by executing lockmgr(lk, LK_CANCEL_BEG, 0).  This call always succeeds.
  The lock state is not otherwise affected.

  Any current threads blocked on the lock or any future thread which
  attempts to gain the lock, who also specify the LK_CANCELABLE flag,
  will be canceled as long as cancel mode is active and their operation
  will return ENOLCK.

  NOTE! Threads which do not specify LK_CANCELABLE are not affected by
	cancel mode and their blocking locks will block normally.

  WARNING!  Cancel mode is not stackable.  The system will panic if you
  enable cancel mode on a lock where it is already enabled.

* The current (typically exclusive) lock holder can terminate cancel mode
  by executing lockmgr(lk, LK_CANCEL_END, 0).  This call always succeeds.
  Once canceled, any other threads that would block on the lock and specify
  the LK_CANCELABLE flag will block normally and not be canceled.

  The current lock holder can also terminate cancel mode by simply releasing
  the last lock with LK_RELEASE.  That is, a release where the lock count
  returns to 0.

* Lock canceling is an optional feature.  Your lock cannot be canceled unless
  you specify LK_CANCELABLE.