Rework blockification

Now that we have FlatGraphs straightened out, we can correctly
separate a graph into aligned blocks. Previously, I tried to do
this using only nodes, but this proved insufficient because long
edges were not taken into account when positioning these blocks.
The introduction of Segments, and their inclusion in blocks fixes
this problem.

Segments also allowed me to remove one layer of
nesting from some graph attributes, like :top-idxs. The first level
of these structures was layer-id at first, but since Segments are
unique by layer (unlike Edges), this is no longer necessary.

I also further continued the trend of passing only the required
arguments to functions, rather than entire graph structures.