Add a Backup() method to the API client

This is a simpler change than my previous one.  It does not try to pull out the common HTTP request code.  In the interest of getting this done sooner, here's a patch with smaller scope.  It stays closer to the original patch from perrito666/voidspace.

Note: I've decided to punt on a full functional test for backup.  It is too heavy a lift for this changeset.  For now we can just rely on the CI tests that we have for backup/restore.
So should some of the stuff from my patch actually go into utils?  For instance, I replaced the writer half of that tar package with what you see here in archive.go.  There are other things in this patch like that (like digest.go).  Could we handle this sort of stuff after this patch gets in.