Reworking clean symlinks and creating repo format 2

Cleaning symlinks was kludgy. I realized it could be handled more cleanly if we treated it as migrating from repo format 1 to repo format 2.

 - Created format 2 of repo index (repo.json). Only difference is that the bundle state is stored as a human-readable string instead of an int ("Available" instead of "2')
 - Added support for "barrier" operations in ZincOperationQueue group, inspired by libdispatch. Barrier operations runs exclusively.
 - Removed symlink cleaning from ZincGarbageCollect tasks and moved it into ZincCleanLegacySymlinks task. This task only runs if it reads a repo format of 1. When it finishes, it changes the repo format to 2 (current).
 - Unified events for maintenance tasks
- (semi-unrelated) Increased to default download count to 5, and the network operations to twice the object download count