When I look at SourceBase, it looks like a standalone class to me which wraps an iterator from the real source base. Should we split it off instead of having these funny named methods like performRewind, getCurrentRow? Our database classes already return an iterator, it's trivial to wrap reading a file in an iterator ( https://github.com/weppos/fileiterator/blob/master/FileIterator.class.php ) so I think this would be beneficial. Also we could skip computeCount and just use count() and make the sources implement Countable. The source would need to have an additional prepareRow besides the default iterator+count() methods.
So the new SourceBase would still be iterator; it would just proxy the real source instead of the real source extending it. I am not sure what to call this new independent SourceBase.
Edit: I am going to call this class simply Source and go ahead with the change.
