WIP: Improvements to a42root

Please don't merge yet.

This change means that only populated fields are traversed. This
has two effects.

One, for my tuples it gives a ~1.6x speedup (greater speedup for
smaller numbers of variables)

Two, it improves handling of recursive descriptors. So now my
definitions like this work:

    message EventExt {
      extend a4.atlas.ntup.photon.Event {
        optional a4.atlas.ntup.photon.Event truth = 101000 [(root_prefix)="true_"];
      }
    }