Use an equal height distribution algorithm

This ensure columns have roughly the same amount of items
columns method shouldn't alter internal state
Hopefully less confusing API
Improve docs a bit