Detect connected components of a graph

This adds a "libpass" library, which will contain all the useful
helper functions designed to make writing passes easier.  The first
helper in there is a connected components searcher, which allows the
connected components of a Flo graph to be interrogated.

The connected components does a simple flood fill, which isn't
particularly interesting.  Flo nodes are treated as the graph
verticies, and a subset of Flo operations are treates as the graph
edges.  In order to make this generally useful, the filter that
defines which edges should be considered for connected components is
passed in as a function.

There's currently one user of this connected components code: the
bitwise operation balancing code (which is also the only optimization
pass that exists).  Note that there's no actual optimization built
into that pass, it just copies the output around.