Review is posted on github. My main issue is that this does not seem to be the right place to define how, for example, coordinates get aggregated into a mean coordinate. These aggregation functions deserve some significant attention on their own, and shouldn't be buried inside DiaObject. I think it really belongs in afw with the rest of our coordinate and angle manipulation functions.
The other broad topic is that I can't quite tell if the dia_object_record is actually a purely-internal implementation detail, or if it's meant to be publicly exposed. The code seems to waffle on this; it's stored with a leading underscore, but then it's also a parameter to the constructor? This breaks encapsulation and exposes a lot of messiness to the user.