Rework analog-punct.hpp; revert to 2-D shapes only.

This new organizing principle promises to be easier to reason
about. The rule is that we have five "terminal" symbols: cuboid,
rectangle, hline, vline, and nil. Every other character-sequence
is produced by prefixing os, Ls, hs, or vs to another sequence.
For example o--*!o is os<1,hs<2,os<1,vs<1,os<1,nil>>>>>,
and !*--o is vs<1,hline<2>>.
Start work on WxHxD cuboids where H==D.

The productions for cuboid<x,z,z> should be 100% complete at this
point; but the intermediate productions are not.

Cuboids with H>D or H<D have not been started yet.
Fix formatting of all sizes of cuboids in autotest.cpp.

Cuboids with H==D had extra whitespace on the row with three
corners. This is now fixed; the spacing should now be correct
for all sizes of cuboids.
Finish work on WxHxD cuboids where H==D.

I've cranked the autotest generator up to 1000 test cases at a time
and run it many times in a row; it looks like all the productions
are correct at this point.

Cuboids with H>D or H<D have not been started yet.