Unified Timer Stream requests and events into the kernel's ZMessage facility,
and created and integrated the lock descriptor mechanism for auto-unlocking.

* Defined a lockC::operationDescriptorS structure for lock operation description
  meant to be used by the Task Tributary for auto-unlock operations.
* Created a kernel strerror for error_t values.
* Wrote some event looping code which is the first real case of the kernel's
  aynchronous API callback mechanism being truly used.
* Investigated an IRQ performance issue in the Timer Tributary where due to
  Virtual Box's slow execution speed, the timer ISR would fail to queue an IRQ
  event on the Timer Trib's dequeueing thread.
  ^ In conclusion, if we optimize __kprintf(), the problem should go away.
  ^ Another solution is to simply setWaitingThread() on timer-device queues as
    soon as they are consumed by the Timer Trib, instead of letting the Timer
    Trib's DQer thread setWaitingThread() on its own when it is eventually
    switched to.
  ^ Final solution, which is sub-optimal is to yield() as soon as a control
    message is created on the Timer Trib control queue, if that control message
    is a "new timer device enabled" message.
* Task Tributary now uses the lock operation descriptor instead of taking
  up to 4 arguments to an overloaded version of block().
* This is also the patch in which Timer Stream events and requests are unified
  into the kernel's ZMessage infrastructure.