thread.*: NOTE: change in TCB struct; 'blocked' is now a pointer to a TCB. When changeThread is called after unlinking the current thread from the list, currentThread->blocked is a pointer to the next TCB (currentThread->next now points to the next thread in a blocked list so it cannot be used here).
Made that change to the structure and added the additional check in changeThread()
semaphore.c: first working version. Uses the 'blocked' field to store the next TCB pointer when blocking a thread