Spent most of the day making file content transfers robust. There were lots
of bugs, hopefully I've fixed most of them. It seems to work well now,
even when I throw a lot of files at it.

One of the changes also sped up transfers; it no longer roundtrips to the
remote to verify it has a file. The idea here is that when the assistant is
running, repos should typically be fairly tightly synced to their remotes
by it, so some of the extra checks that the `move` command does are
unnecessary.

Also spent some time trying to use ghc's threaded runtime, but continue to
be baffled by the random hangs when using it. This needs fixing eventually;
all the assistant's threads can potentially be blocked when it's waiting on
an external command it has run.

Also changed how transfer info files are locked. The lock file is now
separate from the info file, which allows the TransferWatcher thread to
notice when an info file is created, and thus actually track transfers
initiated by remotes.

---

I'm fairly close now to merging the `assistant` branch into `master`.
The data syncing code is very brute-force, but it will work well enough
for a first cut.

Next I can either add some repository network mapping, and use graph
analysis to reduce the number of data transfers, or I can move on to the
[[webapp]]. Not sure yet which I'll do. It's likely that since DebConf
begins tomorrow I'll put off either of those big things until after the
conference.
