format/config: add GoString

This is more convenient for testing and debugging.
diff --git a/plumbing/format/config/option.go b/plumbing/format/config/option.go
index 3c391c6..481af02 100644
--- a/plumbing/format/config/option.go
+++ b/plumbing/format/config/option.go
@@ -1,6 +1,7 @@
 package config
 
 import (
+	"fmt"
 	"strings"
 )
 
@@ -21,6 +22,15 @@
 	return strings.ToLower(o.Key) == strings.ToLower(key)
 }
 
+func (opts Options) GoString() string {
+	var strs []string
+	for _, opt := range opts {
+		strs = append(strs, fmt.Sprintf("%#v", opt))
+	}
+
+	return strings.Join(strs, ", ")
+}
+
 // Get gets the value for the given key if set,
 // otherwise it returns the empty string.
 //
diff --git a/plumbing/format/config/section.go b/plumbing/format/config/section.go
index 547da1e..eeefe84 100644
--- a/plumbing/format/config/section.go
+++ b/plumbing/format/config/section.go
@@ -1,6 +1,9 @@
 package config
 
-import "strings"
+import (
+	"fmt"
+	"strings"
+)
 
 // Section is the representation of a section inside git configuration files.
 // Each Section contains Options that are used by both the Git plumbing
@@ -36,8 +39,26 @@
 
 type Sections []*Section
 
+func (s Sections) GoString() string {
+	var strs []string
+	for _, ss := range s {
+		strs = append(strs, fmt.Sprintf("%#v", ss))
+	}
+
+	return strings.Join(strs, ", ")
+}
+
 type Subsections []*Subsection
 
+func (s Subsections) GoString() string {
+	var strs []string
+	for _, ss := range s {
+		strs = append(strs, fmt.Sprintf("%#v", ss))
+	}
+
+	return strings.Join(strs, ", ")
+}
+
 // IsName checks if the name provided is equals to the Section name, case insensitive.
 func (s *Section) IsName(name string) bool {
 	return strings.ToLower(s.Name) == strings.ToLower(name)