full rewrite, initial commit
strip junk and old trace messages
more cleanups
make get_filecache take a file descriptor

Do even less direct manipulation of filepaths.
cleanups and stripping out dead code
safer get_filecache
refactor repo updating code
restore --rebuild, far saner implementation

All --rebuild has to do is prevent the existing repository from being
loaded into memory.

Why didn't I do this the first time around?
add a useful usage message
implement colon_printf
track repo state and refactor merging code
add error checking to database loading
refactor and cleanup save_database
openat should be used for saving as well
drop unnecessary debugging messages
hacky stub for files support
implement support for files db
build the files db in a worker thread

Had a negligible performance impact on decent repos while improving
performance on large ones.
use EXIT_FAILURE consistently
fixup hash computation