Refactor CommitSoyData to use more of a builder pattern

These are created one-off on every request thread, so making them
mutable is safe enough, and it allows us to get rid of the messy
constructors. Be more explicit about which keys require which optional
arguments.

Change-Id: Ic175369898c206278bd8bc862bef0744b27ee79a
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java
index a8fdeec..bd97f6f 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java
@@ -79,8 +79,9 @@
       Map<String, Object> data = getData(req);
       data.put("title", "Diff - " + view.getRevisionRange());
       if (showCommit) {
-        data.put("commit", new CommitSoyData(linkifier, req, repo, walk, view)
-            .toSoyData(walk.parseCommit(view.getRevision().getId())));
+        data.put("commit", new CommitSoyData()
+            .setLinkifier(linkifier)
+            .toSoyData(req, walk.parseCommit(view.getRevision().getId())));
       }
       if (!data.containsKey("repositoryName") && (view.getRepositoryName() != null)) {
         data.put("repositoryName", view.getRepositoryName());