modified implementation of MessageGroupQueue to use interruptible locks
Basically modeled it after LinkedBlockingQueue
changed to use ReadWriteLock
refactored MessageGroupQueue and added tests
changed MessageGroupQueue to use Condition
added messageGroupSize(groupId) method to MessageGroupStore and all the implementations
polishing based on Gary's comments
removed setStoreLock method in favor of additional constructors
polishing tests, decreased timeouts
made peek() thread safe
added logging