Major design change in reporting - see details.

The key problem in reporting is finding a way to seperate layout and
format.  There are only 2 layouts — by size or by method — but there
are can be many formats — text, XML, HTML, etc.  If we do not seperate
layout and format, we would have to have 2 classes for each format.
For example, for XML format, we need XMLBySize and XMLByMethod.  This
is a parallel heirarchy situation, a duplication that should be
avoided.  In this design, I have to tried to avoid this problem.  See
below.

NOTE — This design is still awkward because Test object still has code
that varies by layout, so the seperation is not quite right; moreover,
Test is larger than expected (37 lines).  These are smells to re-look
at the design later.  But for now, here are the details of the current
design.

1. Report is now abstract and governs the layout;
2. Different sub-instances of Report for different layouts;
3. Report.print() varies based on the sub-class of Report;
4. Test determines the format;
5. Different formats modeled by Test sub-classes;
6. TestGroup — new class;
7. TestGroups renamed as Content;
8. Content does more than previous TestGroup;
9. Couple of enums introduced;
10. TextTest — subclass of Test.