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.)
Things I would assert on an integration-level test are:

1) the filename is created on disk
2) The content of the filename is not nil
3) It is a valid tarball
4) The hash matches expectations (though presumably that's already covered by other code)
5) we *could* assert that some of the filenames in the tarball match what we expect to be in a backup.