SHORT-TERM:
* use btrfs reflink with contents checking
* rework how default --with= and --without= are calculated, so that --except stuff doesn't leak into blob index
* whenever we set the timestamp on a file, reread the value set and check if
  the required granularity has been available.

TO MAKE IT USEFUL FOR BACKUPS:
* encryption: aes256 of rotating hash function + HMAC for identifying chunks + individually encrypted chunks

LATER:
* verify
* diff
* save/restore hardlinks?
* check fs features when restoring
* exclude patterns
* build seed while extracting
* optionally make seeds persistent
* acquire gpg signature along with caidx/caibx/catar
* coalesce index frames sent over protocol
* rework uploading via ssh to use seed instead of cache store for providing chunks to server
* casync-http: parallel http GETs
* casync-http: try all configured stores one after the other before sending MISSING
* add support for compressed index files and archive files
* define mime types for our files
* define http-based url protocol prefix for caibx+caidx
* support accessing base trees through native protocol
* implicitly generate index + chunks when accessing base trees or archives through native protocol
* rework caindex to read multiple chunks per read (use reallocbuffer like elsewhere)
* permit 511 (or 4095?) redundant NUL bytes at the end of archive and index files, so that they could in theory stored on block devices
* optionally import from/export to classic tar ball (and zip?)
* optionally interpret aufs/union mount whiteout files?
* fuse: expose acls and fcaps, selinux, quota projid
* fuse: possibly translate user names on access
* fuse: provide "mount.casync" compat symlink so that people can list casync mounts in /etc/fstab
* encoder: change seeking to be more like decoder's seeking (i.e. delay returned events until the next ca_encoder_step() call)
* rename offset accessor functions (drop the "archive")
* send progress information via sd_notify(), so that people can wrap casync nicely in UIs
* maybe turn "recursive" mode into a numeric value specifying how far to descend?
* make "casync stat" work on a directory with a subpath
* tweak chunker: shift cut to last "marker".
* define sane errors we can show user messages about
* introduce a --best-effort mode when replaying, which means we'll ignore what we can't apply
* when building the cache, also build a seed
* recognize NULL chunks and handle them specially
* make archive digest generation optional
* add "index" digest
* maybe add a concept of "packfiles", to contain multiple chunks in one?
* add libsmbclient backend (so that Lennart can backup to his synology NAS in the easiest way)
* make sure "casync list /etc/fstab" does something useful
* rework CaSeed logic to use CaCache as backend, and then add a new command "casync cache" or so, to explicitly generate a cache/seed
* support blake2 as hashes
* parallelize image generation: when storing chunks in the store do so in a thread
* in "casync stat" output show which flags enable what
* save/restore xfs/ext4 projid
