Refactor agent git state into its own struct to tease apart its locking a bit.

I want to invoke calling the git state when editing files, and that
requires separating it somewhat from the agent's messy and coarse
locking.
diff --git a/loop/agent_test.go b/loop/agent_test.go
index bf9d6a9..911b03e 100644
--- a/loop/agent_test.go
+++ b/loop/agent_test.go
@@ -526,11 +526,11 @@
 
 	// Create an agent with the state machine
 	agent := &Agent{
-		convo:                mockConvo,
-		config:               AgentConfig{Context: ctx},
-		inbox:                make(chan string, 10),
-		ready:                make(chan struct{}),
-		seenCommits:          make(map[string]bool),
+		convo:  mockConvo,
+		config: AgentConfig{Context: ctx},
+		inbox:  make(chan string, 10),
+		ready:  make(chan struct{}),
+
 		outstandingLLMCalls:  make(map[string]struct{}),
 		outstandingToolCalls: make(map[string]string),
 		stateMachine:         NewStateMachine(),
@@ -603,11 +603,11 @@
 
 	// Create an agent with the state machine
 	agent := &Agent{
-		convo:                mockConvo,
-		config:               AgentConfig{Context: ctx},
-		inbox:                make(chan string, 10),
-		ready:                make(chan struct{}),
-		seenCommits:          make(map[string]bool),
+		convo:  mockConvo,
+		config: AgentConfig{Context: ctx},
+		inbox:  make(chan string, 10),
+		ready:  make(chan struct{}),
+
 		outstandingLLMCalls:  make(map[string]struct{}),
 		outstandingToolCalls: make(map[string]string),
 		stateMachine:         NewStateMachine(),