Kernel alarm tchains use locks

Previously, we left this to the tchain source to determine if it needed
locking or not.  The pcpu tchains were able to get by with IRQ
disabling.  This won't work if we want to be able to reasonably disable
an alarm, since we might want to disable from another core.
Alarm pcpu tchains can be adjusted cross-core

The trick is to detect we're on the other core, and trigger the
interrupt remotely.  The alarm code can handle spurious interrupts, so
there's no problem.
Alarms can be unset

The old code assumed the alarms hadn't fired yet, and if you tried to
unset one that had fired, it'd be a mess.
Rendezvous: plan9 style sync with CVs

Rendezvous encapsulates a common CV pattern, albeit one where the
locking is grabbed internally.  If you need the lock grabbed externally
to protect some invariant, then you can probably just use CVs directly.

To reiterate: the rendez locks internally, and when we run the func
pointer to check cond, we hold the lock.  But that lock isn't meant to
protect against concurrent changes to the state - it protects the rv
(rendez variable, btw).

The timeout code is a bit trickier.  You can either use rendez as an
example, or use it directly.  If the locking style of rendez is
insufficient and you need a timer, we can consider exposing the rendez
lock, similar to cv_lock().  Assuming your timer code is fairly
identical.  We'll see.

The test handles a few basic cases, but nothing with actual IRQs.
9ns uses rendezvous

It looks like all the existing tsleep() calls are just using it as a way
to sleep for a little while ("return0" sounds like it will never break
out from the cond() call, and also they were using a generic RV in the
proc).  So we just call udelay_sched() instead, which does the same
thing, without the mess.

Hopefully someone will come along that wants to use the timeouts, if for
nothing else than to get a decent test.  I'm a little surprised no one
uses them (like the TCP stack).

Also, if there's more 9ns code to bring in, the spatch script should
patch them up.