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.
iterators are lovely, but I'd prefer to see slightly goier ones -- look for .Iter() in the state package and the usage of the things returned.

And, in general, *please* avoid in-band signalling. Unless a nil result can always be meaningfully used by the client (possible but relatively uncommon), please return a specific error (eg `return nil, ErrIteratorDone`) rather than forcing clients to infer that meaning from `nil, nil`.