Add BranchIterator#ForEach.

This abstracts the branch iteration from the user.
diff --git a/branch.go b/branch.go
index bb231c3..54b01fb 100644
--- a/branch.go
+++ b/branch.go
@@ -30,10 +30,7 @@
 	repo *Repository
 }
 
-type BranchInfo struct {
-	Branch *Branch
-	Type   BranchType
-}
+type BranchIteratorFunc func(*Branch, BranchType) error
 
 func newBranchIteratorFromC(repo *Repository, ptr *C.git_branch_iterator) *BranchIterator {
 	i := &BranchIterator{repo: repo, ptr: ptr}
@@ -65,8 +62,20 @@
 	C.git_branch_iterator_free(i.ptr)
 }
 
-func (repo *Repository) NewBranchIterator(flags BranchType) (*BranchIterator, error) {
+func (i *BranchIterator) ForEach(f BranchIteratorFunc) error {
+	b, t, err := i.Next()
 
+	for err == nil {
+		err = f(b, t)
+		if err == nil {
+			b, t, err = i.Next()
+		}
+	}
+
+	return err
+}
+
+func (repo *Repository) NewBranchIterator(flags BranchType) (*BranchIterator, error) {
 	refType := C.git_branch_t(flags)
 	var ptr *C.git_branch_iterator
 
diff --git a/branch_test.go b/branch_test.go
index 44f6338..09ebeba 100644
--- a/branch_test.go
+++ b/branch_test.go
@@ -1,11 +1,8 @@
 package git
 
-import (
-	"testing"
-)
+import "testing"
 
 func TestBranchIterator(t *testing.T) {
-
 	repo := createTestRepo(t)
 	seedTestRepo(t, repo)
 
@@ -24,3 +21,35 @@
 		t.Fatal("expected iterover")
 	}
 }
+
+func TestBranchIteratorEach(t *testing.T) {
+	repo := createTestRepo(t)
+	seedTestRepo(t, repo)
+
+	i, err := repo.NewBranchIterator(BranchLocal)
+	checkFatal(t, err)
+
+	var names []string
+	f := func(b *Branch, t BranchType) error {
+		name, err := b.Name()
+		if err != nil {
+			return err
+		}
+
+		names = append(names, name)
+		return nil
+	}
+
+	err = i.ForEach(f)
+	if err != nil && !IsErrorCode(err, ErrIterOver) {
+		t.Fatal(err)
+	}
+
+	if len(names) != 1 {
+		t.Fatalf("expect 1 branch, but it was %d\n", len(names))
+	}
+
+	if names[0] != "master" {
+		t.Fatalf("expect branch master, but it was %s\n", names[0])
+	}
+}