Reduced a lot of code duplication in OptimisticConcurrentArrayList.  I also added an abstraction so we can mess with different internal DataSet implementations to see which ones perform best