This is a work-in-progress commit, with several bugfixes ongoing.
* Rolling back a write by cancelling and garbage-collecting
currently-uploading manifests and blocks works correctly now.
The cause of this bug was a file descriptor conflict, whereby Syndicate
would close a cache block (releasing the file descriptor) without also
closing the FILE* object (with the same descriptor) that was sent to the
replication subsystem.  In doing so, the descriptor would sometimes be
recycled to create a socket to the RG over which to send a DELETE
command, only to have that socket closed early when the replica_context
structure (with the invalid FILE* object) was freed (i.e. the file
descriptor that earlier identified the cached block but now identifies
the RG socket would get closed in the cleanup routine).
* Minor fix: send the block hashes in a WriteMsg.
* Minor fix: print the task ID and PID to aid in strace debugging.
* Minor fix: trunc() should still succeed if it fails to reversion
cached data that got erased earlier (as part of the same operation).
* Minor fix: ms_client_update() should return its own error codes, not
those of the methods it calls.
* Minor fix: consolidate code that waits on write futures (across
write.cpp and trunc.cpp).
* Minor fix: print out better debug information in the RG.
* Minor fix: decrement the number of cached blocks when an external
client of the cache.cpp module evicts a block.
* Minor fix: don't free replica_context structures in
fs_entry_replica_wait_and_free() unless they are marked to be freed
internally.  Add fs_entry_replica_clean() to allow an external client to
the replication subsystem free references to replica_context structures.