Implementations of a notion of graph equivalence for blockmodeling, and a mechanism for collapsing blocks.

The definition of "equivalence" used here is different from the equivalence functions defined between graphs. This equivalence refers to the network measure forms of equivalence used for blockmodeling. In blockmodeling, groups of vertices are clustered together by similarity (as if "blocked" together on the diagonal of a matrix).

This implementation provides:

{@link EquivalenceAlgorithm EquivalenceAlgorithm}
  An interface for an algorithm that returns an EquivalenceRelation.
{@link EquivalenceRelation EquivalenceRelation}
  A class that represents several mutually-exclusive partitions of a set. The object is constructed with a Set of Sets; the members of each set are all vertices from the graph. The ER needn't cover all vertices; it contains a funtion called "getSingletons" that returns vertices that are not equivalent to any other vertex.
{@link StructurallyEquivalent StructurallyEquivalent}
  An algorithm that finds sets of vertices that are structurally equivalent. In order for two vertices i and j to be structurally equivalent, the set of i's neighbors must be identical to the set of j's neighbors, with the exception of i and j themselves. (In those cases, a directed edge may join i to j only if another directed edge runs the other way.)
{@link GraphCollapser GraphCollapser}
  Runs through an EquivalenceRelation, replacing all the vertices in each set of the relation with one vertex of type {@link GraphCollapser.CollapsedVertex GraphCollapser.CollapsedVertex}. It also replaces all the edges from each vertex to the graph with a {@link GraphCollapser.CollapsedEdge GraphCollapser.CollapsedEdge}. (See the class documentation to see how this is done.)
{@link BipartiteGraphCollapser BipartiteGraphCollapser}
  Extends the GraphCollapser to work for BipartiteGraphs.