Add the client side of the backup API.

This builds on the work of Michael Foord.  I've reorganized the code a little, added tests and factored out the raw RPC code from the backup client code.  (The raw RPC can later be re-used by the other 2 client methods that currently duplicate the code.)
Since this didn't actually land for the 1.20 release, I'd really like to see us go with "smaller more focused facades". So rather than being Client.Backup and Client.Restore, which both don't have anything to do with all the other methods on Client, I'd rather see a Backup facade be introduced and have us using it over there.
I realize this is *way* too late to be introducing this concept, and I'm sorry I didn't catch it earlier.
We can still move towards that, I think, and hopefully the API versioning code will finish up in the next day or two and we can make use of that to give ourselves the API we *want* instead of limping along with just the one we have.

That would also end up moving the objects here from being in state/api/client.go to something more like state/api/backup/backup.go