ahat: Improve field diffing.

* Factor field diffing code out of Diff into its own class.
* Switch to a new interface for diffing fields that does not rely on
  being passed mutable lists.
* Reimplement field diff to work better when fields have been added,
  deleted, or reordered.

Bug: 62408050
Test: m ahat-test, with new tests for field diff added.
Change-Id: I56c0414f8f4c11809895d809494d752201d33563
diff --git a/tools/ahat/test/TestDump.java b/tools/ahat/test/TestDump.java
index ceb7346..3dce2dc 100644
--- a/tools/ahat/test/TestDump.java
+++ b/tools/ahat/test/TestDump.java
@@ -118,9 +118,9 @@
   private Value getDumpedValue(String name, AhatSnapshot snapshot) {
     AhatClassObj main = snapshot.findClass("Main");
     AhatInstance stuff = null;
-    for (FieldValue fields : main.getStaticFieldValues()) {
-      if ("stuff".equals(fields.getName())) {
-        stuff = fields.getValue().asAhatInstance();
+    for (FieldValue field : main.getStaticFieldValues()) {
+      if ("stuff".equals(field.name)) {
+        stuff = field.value.asAhatInstance();
       }
     }
     return stuff.getField(name);