Testing updates back to rev e1e397...

 - tweaks to dbschem.alter_table() -- use a config if it's passed in, handle
   mutual exclusion of addcol and dropcol
 - self.DBI() -- simplified database connection in test_CrawlDBI.py
 - navigational comments in test_CrawlDBI.py to make it easier to tell which
   class we're in from the function header
 - tests for operations on closed databases
 - simplified a bunch of exception tests with self.assertRaisesMsg()
 - test for CrawlConfig.dictor() constructor

Change-Id: I38df2760f227f17000b9b0ec1c88bc5ae375bbd4
Coverage, inspection followups

 - Found coverage.py and started using it to see how well the tests cover the
   code
 - Handle more than one record coming back from a table_exists query
 - Eliminated extra definitions of ymdhms() in favor of the one in util.py
 - Always prepare select statements for DB2

Change-Id: I91f60b45f3ae1ab1a0499a32a84636cbfd44a2d7
Checkable: ttypes; removed pexpect from crawl.py

 - Add ttypes to Checkable.py
 - In crawl.py, replace pexpect.run("ps ...") with routine pidcmd(), ignoring
   processes with no command line
 - tcc_plugin.highest_nsobject_id() moves to tcc_lib.py
 - Tweaks to get the tests to work

Change-Id: Iec36e027970520d905f9ae7cfb4a21da2fbe0bc4
Send mail on exception shutdown

 - Activated env hpssic in cronjob
 - Wrote CrawlMail.send(), used in Alert.py, CrawlDaemon.give_up_yet()
 - Moved give_up_yet tests into a separate text fixture since they share setup
   code
 - Various comments to make things clearer

Change-Id: I25cc2b7eedcb922ab9e28038ee648ca2df23d11b