A "content store" abstraction.

This is where the file content is stored, away from the repo.

Also two implementations of the abstraction: a local one for testing
and a remote one for production use.
Should this use rsync for reads too? rsync is more resilient to failure than http, we wouldn't need a separate http server, and the files could only be accessed by people with the right ssh credentials