Fixed a problem with worker_threads not removing themselves from the wait list.
Removed a potentially dangerous catch(...)
Added an assert to util_queue::ser_queue()
Fixed a deadlock related to unique_lock.

unique_lock unlocks the mutex first and then it sets the owns_mutex flag
to false. This means that if an unlucky thread destroys the unique_lock
after another unlocks it, it can call the unlock() member function after
it was actually unlocked. This results in a thread unlocking an unlocked
mutex and all hell breaks loose.
I implemented a class called better_lock that sets the flag before
unlocking, therefore using the mutex's unlock() semantics to "publish"
that change to all threads that then lock it.
Made the ThrQueue.SerQueue test more generic so that the number of tests can be changed.