The goal is to have this class provide everything else if you only need to provide:
All remaining functionality is implemented against these methods, including Transaction and Locking Support.
Like say for instance the FeatureType, its metadata and so on.
The default implemenation should contain enough information to wean us off of AbstractDataStore.
Implementations are based around feature collections.
This class maintains a cache of certain aspects of a feature type which are subject to the state of a dataset modified in a transaction.
The API you are required to implement is *identical* the the barebones FeatureResults interface:
This class will implement the 'extra' methods required by FeatureCollection for you (in simple terms based on the FeatureResults API).
There is no reason modify this class, subclasses that wish to work with a custom iterator need just that - a custom iterator.
The use of this class against a FeatureSource not backed by a Transaction may *really* cut into performance.
The normal Collection.iterator() method does not let us return an error (we always have to return an iterator).
Compare contrast with XPath utility class in ext/view.