Prepare for row-deletes validated by versions.

This is probably going to end up a fairly large change.  The Loader
implementations currently assume that a row exists after an upsert on
it has been done and does not exist after a delete on it.  With version
checks, these assumptions are no longer valid.
Massive refactor of the SqlLoader

This is the heart of the data coordinator.  Unfortunately, some assumptions
before the days of row version IDs are no longer valid.  This led to a
giant replacement of basically the entire innards of the SqlLoader, plus
some auxiliary changes on closely associated classes.

Fortunately, the upshot of this is that it became simpler (only a single
codebase for datasets both with and without user-defined primary keys)
though there are still a few separate code-paths within it.  Also the
Report became slightly simpler, as the "elided" field goes away, and
more complex (as it now reports row versions after updates and inserts).