merge and conflict resolve with master
Integration with a multithreading SAC

New functions:
lpel_task_t *LpelTaskSelfOrNull(void);
int LpelTaskCurrentWorkerId(lpel_task_t *t);
int LpelWorkerCount(void);

void  LpelSetUserData(lpel_task_t *t, void *data);
void *LpelGetUserData(lpel_task_t *t);

void LpelBiSemaInit(lpel_bisema_t *sem);
void LpelBiSemaDestroy(lpel_bisema_t *sem);
void LpelBiSemaWait(lpel_bisema_t *sem);
void LpelBiSemaSignal(lpel_bisema_t *sem);
int LpelBiSemaCountWaiting(lpel_bisema_t *sem);
User destructor for Task local data; Removed LpelTaskSelfOrNull, LpelBiSemaCountWaiting
cleanups: revert changes in LpelWorkerCurrentTask and LpelTaskSelf
trivial: add string message to an assert in LpelWorkerGetContext
Binary semaphores for SAC: Throttle LPEL task re-scheduling to max 1000 times per sec.

Rationale: Binary semaphores are used in SAC to implement fast barriers.
Ideally there shouldn't be other tasks on those workers that run SAC bees.
The need for task rescheduling on these dedicated workers is very low.
Therefore, to optimize overheads the function LpelBiSemaWait will try to re-schedule
the LPEL worker at most once per 1 milisecond.
critical: do not use the CLOCK_PROCESS_CPUTIME_ID

The clock source CLOCK_PROCESS_CPUTIME_ID gives time integrated (summed)
over all cores of the process, which is useless for monitoring purposes.
fix a small bug while merging with Bee-Hive from Jara's work