Add BatchIterator.

Wrote AsyncIteratorPerf. It explains why we need a batch iterator. Wrote BatchIterator and included it in the performance test to verify it improves things.
Convert TierIterator from AsyncIterator to BatchIterator.
Have BatchIterator iterate A rather than Seq [A].

The BatchIterator should be a Scala Monad on elements (A) rather than sequences of elements (Seq [A]). The filter method provided the key insight. It was

    def filter (p: Seq [A] => Boolean)

It could only remove whole sequences. This CL changes it to

    def filter (p: A => Boolean)

It can now remove individual elements.
Convert LogIterator from AsyncIterator to BatchIterator.

This makes batches of log entries of size one, which does not improve efficiency of replaying the log. It prepares LogIterator to work with a batch based MergeIterator, which we will need to improve efficiency of scanning a table.
Convert MergeIterator from AsyncIterator to BatchIterator.
Use BatchIterator through most of Store.