Re wrote backup in go

Previously backup was a cmd plugin writen in bash.
Backup was implemented as a go function, still not in use.
Tests where added since the previous implementation had none.
backup package includes:
 * BackUp function, which performs the actual back up.
 * tarFiles which creates a tar or tar.gz/tgz depending
on the output file name given.
 * runCommand which is a convenience function to simplify testing
since the back up process requires calling external executable
mongoexport.
To save indentation, you could switch the sense of this condition
and return early when it's not a directory.

e.g.

     if !fInfo.IsDir() {
          if _, err := io.Copy(tarw, f); err != nil {
              return fmt.Errorf("failed to write %q: %v", fileName, err)
          }
          return nil
     }

     directory logic