bugfix: race in sync2.BoundedRWLock

There's a race in the BoundedRWLock implementation which lets readers to
sneak through while a writer is holding the lock.

Example race:
 * Writer A calls `WUnlock()` and wakes up a whole bunch of readers inside
   `processQueue()` and releases `rw.control`.
 * Writer B arrives right before any of the readers could acquire the `rw.control` lock.
   Writer B thinks there are no readers and `rw.nextWriter == nil`. So it thinks it has
   an exclusive lock.
 * Finally the readers actually wake up, acquire `rw.control`, increment the `readers` counter.
   Now you've both readers and writer holding the lock at the same time.

Fix:

Whenever a reader is woken up, we also increment `rw.readers` counter immediately. This prevents
a writer from racing with the readers. Readers decrement the counter when they unlock as before.
Unittests for sync2.BoundedRWLock
Merge pull request #63 from mallipeddi/rwlock-fix

bugfix: race in sync2.BoundedRWLock