Semaphore 'release' mechanism.

This is a slight perversion of what semaphores are supposed to be for,
but it allows a completely safe way to shut down systems which rely on
semaphores.  vsSemaphore::Release() completely disables the semaphore;
all waiting threads are released immediately, with their calls to
'::Wait()' returning false.

Added an assertion that the semaphore has been released before its
destructor was called -- the caller must ensure that all waiting threads
have shut down before the semaphore is destroyed!

Also removes the 'PeekValue()' debugging method.  It only ever worked on
Unix OSes anyway, and even there was completely unsafe (since it didn't
lock the mutex before accessing the 'm_value' value)