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.)
Following the convention, there should be no full stop at the end.
>
> In state/api/backup.go:
>
> > +}
> > +
> > +func validateBackupHash(backupFilePath string, resp *http.Response) error {
> > +	// Get the expected hash.
> > +	prefix := "SHA="
> > +	digest := resp.Header.Get("Digest")
> > +	if !strings.HasPrefix(digest, prefix) {
> > +		msg := "SHA digest missing from response. Can't verify backup file."
> > +		return fmt.Errorf(msg)
> > +	}
> > +	expected := digest[len(prefix):]
> > +
> > +	// Get the actual hash.
> > +	tarball, err := os.Open(backupFilePath)
> > +	if err != nil {
> > +		return fmt.Errorf("could not open backup file: %s", backupFilePath)
>
> as you did here. "SHA" I'm going to give you a pass on because it is 
> an abbreviation :)
>
> —
> Reply to this email directly or view it on GitHub 
> <https://github.com/juju/juju/pull/200/files#r14444818>.
>