Added initial revalidation service to revalidate SDs against schemas
Implements the core of #31 (closed).
The re-validation service can be a long-running service that is set up once and occasionally triggered to start the re-validation process. It stars one management Thread and a configurable number of worker Threads. The management Thread will fetch batches of hashes from the Self-Description store and queue them for re-validation. The batch size is configurable. When the number of queued hashes drops below half a batch-size, the manager will fetch a new batch.
Batches are fetched using the last hash of the previous batch, for efficient pagination.
Writing to the database only happens when a Self-Description fails to validate.
The self-descriptions in the store are chunked into a configurable number of chunks, with each hash being assigned to a chunk based on:
hashtext(sdhash) % :chunks = :chunkid
This allows a cluster of catalogue instances to all work on the re-validation process.