Breaking fanout is a separate layer

Now we just calculate generalized fanout in fanout.rb, and then in
kfans it gets split up into fans with max fanout of k.