Use posix mutex and cond var to reduce ctxs.

This patch allows libpgm to be compiled with
posix and condition variables that are used
to optimize token transmission. With this
feature enabled, consumer nodes block on a
condition variable instead of on select(fifos)
within a loop. The consumer blocked on a
condition variable is ONLY signalled when its
token constraints have been satisfied. Thus,
context switches are reduced. Furthermore,
this framework also makes PGM consumer thresholds
trivial to implement, so that feature is also
added by this patch.
Boost producers, not consumers.

Overhead accounting is easier (and more
accurate) if producers run at a boosted
priority when they are sending out tokens.
Prior this patch, only consumers waiting
for inbound tokens ran at a boosted priority
(which was incorrect). This was incorrect
because a boosted consumer can prevent its
unboosted producer from signalling/waking
a higher-priority sibling consumer,
resulting in a priority inversion. This could
have been addressed by also boosting the
priority of the producer (and made to have
a higher prio that any of its boosted
consumers), but that also introduces priority
inversions. Instead, it's best to only boost
the producer and shift the deadline of the
consumer while it is waiting for tokens, as
per Liu's release analysis.
Add spin-based token signalling.

This patch adds a compilation option (and implementation)
of using spin-based locks instead of pthread sleep-based
locks for optimized token signalling.