Split watch state database initialization into separate command, and created finalization command.
Moved the hardwired value of 200 for retrieval of timeline RSS entries
to a configuration value ('num-entries'), with default of 200.

Extended the database schema of table 'seen' with a column 'atime' to
hold the last time the artifact was seen in the timeline RSS (epoch).

Modified the database schema of table 'seen', going from the constraint
	unique (pid)
to the constraint
	unique (pid,hash)
=> Guard against the possibility of artifact ids not unique across the
   entirety of all repositories, but only within a single repository.

Added a configuration value ('days-to-expiry') for the expiration
threshold (in days), with a default value of 30.

Created command 'watch-schema-update-002-seen-expiry' to update the
database schema of existing state databases.

Modified 'watch-do' to use the new configuration value 'num-entries'.

Modified 'watch-do' to touch the atime of seen artifacts as means of
resetting their expiry timeout.

Modified 'watch-do' to extract the ticket titles from the timeline RSS
entries, for use in the generated mail, if any. As a note on that, the
thought that we would need a clone of the repository to get this
information was obviously wrong.

Created command 'watch-expire' to scan the state database for expired
artifacts, and remove them.

Created command 'watch-cron' as the entry point for cron, calling do
and expire, with locking.