remove unused code
Delete set iterator pointers to prevent memory leaks and enable updating of predicate weights at function exits
Run tabbing pass
Select a new predicate branch when the selected branch in the predicate tree fails and the failed thread can not find any other thread to wait for
Some edits
Toward implementing the counter approach to monitor threads
Add some documentation for WaitObj
Every time a thread enters a function, check whether other threads should still wait for this thread or not.
Add some methods for WaitObj
Create WaitObj to store information about which thread is waiting for whom and is waiting by whom