column_x_positions now returns a lazy enumerator

* You can now call column_x_positions.first(n) to get as many or as
  few positions as you want
DRY'ed up duplicate first() call
Converted x/y loops to enumerators
Factored hour_labels_with_y_positions
hour_label_with_y_positions now yields labels
You know, I never liked that hour label math much