[Keepstore] Support a portable data challenge API
Keepstore gives the client a salt. The client returns some hash including that salt plus the original data to prove it has the original data. If the client does so successfully, Keepstore discloses whether or not it has the block, and returns a newly signed block locator. Upload clients can use this to avoid uploading blocks that already exist on the destination.