Further optimization ("pointer lazy loading")

While resolving some nasty bugs with transactions and cache, we saw that DataStruct objects cannot know anything about DO references. These references were surviving the end of original transaction that made them, and were reused in another one, which got them from cache.

This situation made us remove all xxxDO references from DataStuct, leaving there BigDecimal instead. Now get/set methods of generated DO object are a bit different, set method stores DO object reference into map that is known to DO only, and extracts OId to store into DataStruct; get method after getting BigDecimal form DataStruct looks up the map for previously used (stored) DOs, then if look up fails creates one (with createExisting). Further optimization represents conditional use of DO map, which isn't used if transaction and its cache is on.

For oid based tables (references - DO objects), now, new public setXXX and getXXX methods are created in DO classes:

oid_getXXX() - returns oid value of referenced DO as a BigDecimal 
oid_setXXX(BgDecimal), oid_setXXX(ObjectId), oid_setXXX(String)- sets oid value of referenced DO

Effect of these change is that application will create only DOs actually used, leaving all other out of a loop.