doc.h: Only list search keys for browse+userlist, merge ,/.

The ",/." thing may look a bit confusing as the search key itself is
'/', but I suspect it'll be alright. At least it's consistent with some
other use of "x/y" in the docs.
net.c: Do lseek() before switching to non-sendfile fallback

We can't rely on sendfile() updating the file position.
db.c: Ensure that /gc completes in linear time when cleaning up hashdata

This fixes http://dev.yorhel.nl/ncdc/bug/59

I'm not too happy about this fix because it adds significant disk I/O
for an index that would fit in memory just fine. There are workarounds
to make this more efficient, but they require more code. And I'm lazy.
db.c: The temporary hashdata-cleanup index really shouldn't be UNIQUE

It's possible to have a file with the same TTH shared multiple times,
after all.
net.c: Don't pass offset argument to Linux' sendfile()

And have sendfile() update the file position at each call. This should
allow sendfile() to be used for larger-than-2GB file offsets on 32bit
Linux systems.
dl: Fix download of 0-byte files + resume finalize on priority change

The latter is required to recover from errors in download finalization.
(Errors will be properly handled in next commit)

0-byte files also take a shorter route, no attempt to open a connection
to the user is made.
dlfile: Detect and handle I/O errors during finalization

Correctly handling, and more importantly, recovering from any possible
I/O errors is a huge pain and fairly complex. The current fixes should
allow full recovery when the move to the final destination fails, even
across ncdc restarts. But there's probably still some error sequences
that can't be recovered from. That's hard/impossible to really fix,
because the ftruncate() and file move can't be done as a single atomic
operation.

Also, recovery across restarts assumes that the changes to the
db.sqlite3 file do get flushed.