Exhaustively test Wx2x1 cuboids.

These tests might still not be 100% exhaustive, but they must
be pretty close!
Add a random test autogenerator for analog-punct.hpp.

This is a quick and dirty hack; it needs polishing.
But it does generate random valid rectangles and cuboids,
and the appropriate assertions to verify their properties.
A few changes to analog-punct.hpp later, and indeed all
the random tests pass!

analog-punct.hpp is still limited to cuboids with
(D >= 1) and (H == D+1), but I'm moving in the direction
of relaxing that to (H > D) with this commit.
Allow cuboids of dimension WxHxD for all (0 < D < H).

(D > 0) implies that the cuboid contains an "L".
(H > D) implies that the top of the front face is
encountered lexically before the rear corner of the
cuboid.

I've also expanded the autogenerator to generate these
cuboids, and to generate random 1-D lines, and to be
a little smarter about "random" characters that only
have one possibility in practice. For example, in the
sequence "| |" (vertical, whitespace, vertical), the
second vertical MUST be the "!" character, because
neither "! |" nor "| |" can be part of a valid C++
expression.