#152: Change resolve()/doResolution() to flush() and emit an event which subclasses and others can respond to. This is more inline with what a Stream is and how it works than the word "resolve". Also addressed the synchronization problem by introducing a Queue in the batch handling and not referencing the acceptCount at all but keeping track locally of how many values have passed through since the method call was made (which is actually more accurate since before you could call batch() in the middle of a batch and get a number of values that didn't match the batchSize). Also updated the Stream.reduce() to not reference acceptCount and keep track of its own batch index as well.