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.)
That's a good point about the hash of the content vs. the hash of the compressed archive.  In discussing that with others the distinction didn't come up nor was it apparent.  However, while I don't anticipate that the compression format will change, it will be more correct to have GetHash() operate on the uncompressed file.  I'll fix that.