Improved semantics for BoundedBlockingQueue

- Blocking methods lock interruptibly
- drainTo can no longer drain to the backing
- drainTo/clear now calls signalAll instead of signal

Also made some other changes to make the code nicer (I hope!).