Bugs in BaseClusteringAlgorithm

Under BaseClusteringAlgorithm, the method applyClusteringStrategy() can remove clusters. However this removal is not reflected in the CentresHolder object of the ClusterSet. This can resolve in the following error on the next iteration:

java.lang.IndexOutOfBoundsException: Index: 3, Size: 2
        at java.util.ArrayList.rangeCheck(ArrayList.java:657)
        at java.util.ArrayList.get(ArrayList.java:433)
        at java.util.Collections$SynchronizedList.get(Collections.java:2419)
        at org.deeplearning4j.clustering.cluster.ClusterSet.nearestCluster(ClusterSet.java:153)
        at org.deeplearning4j.clustering.cluster.ClusterSet.classifyPoint(ClusterSet.java:102)
        at org.deeplearning4j.clustering.cluster.ClusterUtils.classifyPoint(ClusterUtils.java:73)
        at org.deeplearning4j.clustering.cluster.ClusterUtils.classifyPoints(ClusterUtils.java:57)

Additionally, CentersHolder is not Serializable, which causes a Serialization exception to occur when serializing a ClusterSet object.

One more thing is that 3 of the ClusteringOptimizationTypes seem not to be implemented. The ClusterUtils.applyOptimization method is only checking for 2 of them.

@madhs53 mind filing an issue with a reproduction test? Thanks!