Fix interaction with hsi so pexpect sees hsi's stderr as well as
stdout. This required adding our own hsi wrapper which calls the hsi
binary using exec rather than spawning a shell.
Compute the cvstat checksum value by counting records in checkables
with checksum = 1 rather than maintaining a separate count. This way,
they can't get out of synch.
Tests for 'group by' support in CrawlDBI.

Updating Dimension to get population and sample summaries from the
checkable data rather than trying to track it separately.
Checkable.py:
CheckableTest.py:
 - Wait until the end of check() to persist the current object to the
   database.
 - Adjust how the Dimension object is used based on it being updated
   from the checkables table by the load() method. Method
   update_category() is obsolete.
 - Don't process files when they are found in a directory, but later
   when we get to their record in the checkables table.

CrawlDBI.py:
CrawlDBITest.py:
 - Added support for "group by" on select requests and tests for that
   support.

Dimension.py:
DimensionTest.py:
 - Populate the population and sample summary dictionaries from the
   checkables table. The dimension table is obsolete. This also
   obsoletes a number of Dimension.py methods: db_init(), persist(),
   update_category(), _update_pct(), sum_total().
 - Updated tests to reflect use of the checkables table, removed
   obsolete tests.
Remove obsolete methods from Dimension.py -- persist(),
update_category(), _update_pct().
 - Track file fetch failures and whether they've been reported in the
   database so that we can give up after a few fetch attempts and
   report the problematic archive entry.
 - Improve database interaction -- with load(), persist(), .in_db, and
   .dirty
 - Handle timeouts in hashcreate, hashverify.
 - change the function prefix so there isn't a conflict with
   tcc_common.py
 - use crawl.cfg rather than tcc.cfg
Warn about quotes around parameter markers in SQL statements.
Move cvreport over to cvtool.py and deprecated it in crawl.py.
Fixes from production to get tape_copy_checker working (mostly)
Moving functionality from tape-copy-checker.py to tcc_common.py to
make it more flexible and accessible.
ignore cvtool symlink to cvtool.py
Merge branch 'scount' into devel
Merge branch 'devel'