Add a heartbeat to each work item.

The heartbeat starts once the item's been pulled out of the queue, and
stops right before the item is marked as done.

The intent of this system is to provide automatic detection of job (or
pipeline) failure, which has become an issue now that we are using
multiple fetch machines.
Anonymize pipeline identity.

We will soon display pipelines for each job in the dashboard.  The
pipeline ID is constructed from potentially sensitive information: the
FQDN, hostname, and process ID.  Best to obscure it.

MD5 was chosen because it has the shortest hex digest of all hashes in
hashlib, and we do not need a collision-resistant hash function for this
purpose -- just something to obscure the input.