- appending: it's important that the index records for individual
messages make it to disk before the index header indicating that
they're there. so something like:
- sync messages to disk (or depend on link() being atomic)
- create new index records, flush to disk
- create new header if necessary (adding new user flag), flush to disk
- flush cache file
- update index header, flush to disk