message: Tree: make Generic FieldKind encoding tests table driven
  ## Description
  This tweaks the encoding tests for Generic FieldKind to be more table
  driven, making adding more test cases (ex: different formats or use
  cases) as well as more test data easier to add in a uniform way.
diff: @@ -360,8 +360,10 @@ describe("Generic FieldKind", () => {
  assert.deepEqual(actual, expected);
  });
  - it("Json encoding", () => {
  - const input: GenericChangeset = [
  + const encodingTestData: [string, GenericChangeset][] = [
  + [
  + "Misc",
  + [
  {
  index: 0,
  nodeChange: nodeChange0To1,
  @@ -370,17 +372,29 @@ describe("Generic FieldKind", () => {
  index: 2,
  nodeChange: nodeChange1To2,
  },
  + ],
  + ],
  ];
  +
  + describe("Encoding", () => {
  + const encoder = genericFieldKind.changeHandler.encoder;
  const version = 0;
  + for (const [name, data] of encodingTestData) {
  + describe(name, () => {
  + it("roundtrip", () => {
  + const encoded = encoder.encodeForJson(version, data, childEncoder);
  + const decoded = encoder.decodeJson(version, encoded, childDecoder);
  + assert.deepEqual(decoded, data);
  + });
  + it("Json roundtrip", () => {
  const encoded = JSON.stringify(
  - genericFieldKind.changeHandler.encoder.encodeForJson(version, input, childEncoder),
  - );
  - const decoded = genericFieldKind.changeHandler.encoder.decodeJson(
  - version,
  - JSON.parse(encoded),
  - childDecoder,
  + encoder.encodeForJson(version, data, childEncoder),
  );
  - assert.deepEqual(decoded, input);
  + const decoded = encoder.decodeJson(version, JSON.parse(encoded), childDecoder);
  + assert.deepEqual(decoded, data);
  + });
  + });
  + }
  });
  it("build child change", () => {
  