Diff worker

There are a couple parts to this:

* Some upgrades to the file listing endpoint, such as xz/lzma support and calc & cache on layer push.
* New diff files endpoint. Diffs are calculated the first time they are requested by filling a job queue which is consumed by separate worker processes.
* Everything should be cached