Here's the github diff view - its also a convenient place to put code review comments.
If its more convenient I can do a reviewboard post too once I'm happy calling the patch more-or-less final.
The upgrade is non-trivial, but I think most client API's should compile with a few exceptions.
The first change I made was to refactor the whole Persistent system to remove the StateManager. It was obvious that it had been abandoned since the new and readable states weren't being used; additionally, its my opinion that using a lazy callback or something inside persistent objects would be better than using something like a readable field, and weather or not a field is new is basically the same thing as if all the fields are dirty, so this didn't make sense either.
The next thing I wanted to do was remove the writing of transient information (the dirtyness) from being a hack on top of Avro. This was necessary since the Avro encoder system is now packaged up in such a way that you really can't override ResolvingDecoder, which was necessary for the previous implementation. I did this by doing a total rework of the Gora compiler so that it extends AvroCompiler. This also makes this class more manageable because the 1.7 Avro compiler uses velocity templates and has become fairly extendable. The new scheme for tracking dirtyness is to augment each schema with a new field, _g_dirty, which keeps track of what fields are dirty.
I also have started work on making dirty more reliable. Using Utf8 classes and ByteBuffers, it is possible to make a field dirty without the set() method for the field intercepting the mutation. I think this is not the right thing. Structural changes to records, maps, lists, and unions are tracked automatically, however, as are changes on immutable types such as numbers and booleans.
Most other modifications are trivial. Maps are represented by java.util.Map and arrays are represented by java.util.List now, so all the references to the Avro-ish way of doing things have been updated.