WONDERFUL SOLUTION!!  Redesigned RowAggregate.

In the previous design, RowAggregate (super) hierarchy included
RowCounts (abstract) and RowContent.  BUT WE HAD A BIG PROBLEM.  We
didn’t have the right life times for the instance variables of
RowCounts and RowContent.  That is, we needed to convert these instance
variables to local variables, but we couldn’t find a way to do it.

The problem becomes pressing because clients directly access the
instances of RowCounts and RowContent, so we had potential for
unpredictable and buggy results.

To overcome these issues, in this design, we don’t allow clients to
access instances of RowCounts and RowContent.  Instead, clients
directly ask RowAggregate for the final information they need — size(),
all(), toString().

To make this happen, we made RowAggregate, RowCounts, and RowContent
all abstract classes.  When clients need information — such as size() —
they call the equivalent static method in RowAggregate.  RowAggregate
then creates an anonymous object of the right type and invokes the
right method on it, returning the value to clients.

With this design, we no longer have to worry about clients misusing
RowCounts and RowContents.  Also, calls to RowAggregate from Row (the
client here) are now clearer.

We modified Row to fit this design.

THIS IS A REAL NICE, INGENIOUS SOLUTION!!!