day 08 generator: Use top-two-rows optimisation
day 08 generator: Use top-two-rows optimisation

We fill the top two rows, then use the cells that will be empty in the
final top two rows' configurations to balance the bottom rows better.

This helps in cases where the rows are very unbalanced, causing the tail
end of the instructions to alternate between rect 1x6 and shifting just
one row. With better balance comes better utilisation of each rect 1x6.

Top two rows are chosen since any element in the cartesian product of
{true, false} and {true, false} can be dealt with. Top three rows might
leave me in a situation I can't fix easily.

The user is able to choose the optimisation level with -O2, -O1, and
-O0. The default will be -O2. -O2 is quite aggressive, but might fail if
a row that receives a spare cell doesn't have more room to hold it.

petertseng/adventofcode-rb-2016,petertseng/adventofcode-rb-2016