ISPN-4651 LevelDB crashes JVM when stop() is called concurrently with write()

https://issues.jboss.org/browse/ISPN-4651
I must admit the first time I saw this it screamed ReentrantReadWriteLock as well.  However looking over it I think that Semaphore may actually be a good fit with a small tweak.  I am personally afraid of clear and stop being livelocked especially the latter if you are trying to shut down due to being overwhelmed by requests for example.

I wouldn't suggest using a fair lock since it would increase lock acquisition time on reads even, which we wouldn't want, although compared to hitting DB2 it may be miniscule.

Instead I wonder if we used something like drainPermits to remove all the available permits to not allow for new threads to come in forming a more fair policy but not requiring the overhead unless a writer is present.  I think just calling drainPermits to remove 99.9999% of the permits and then just collect them 1 by 1 (acquire) until you have Integer.MAX_VALUE would probably be fine.