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.)
GetHash needs to be a var to be patchable, which is how Backup was done, right?

Generally we try hard to not patch variables in other modules, but instead create a local var pointing to them.
So you would have

var getHash = backup.GetHash
inside of this state/api/backup.go
and then you would put
var GetHash = &getHash
in export_test.go
and then you can patch it all you want.