code: public void writeObject(final ZooPC objectInput, ZooClassDef clsDef) {
          long oid = objectInput.jdoZooGetOid();
          out.startObject(oid, clsDef.getSchemaVersion());
  
      	out.writeLong(oid);
          serializeFields1(objectInput, clsDef);
          serializeFields2();
          scos.clear();
  
          // Write special classes
          if (objectInput instanceof DBCollection) {
          	serializeSpecial(objectInput, objectInput.getClass());
          }
          
          scos.clear();
          usedClasses.clear();
          
          out.finishObject();
      }
docs: Writes all objects in the List to the output stream. This requires all
  objects to have persistent state.
  <p>
  All the objects need to be FCOs. All their referenced SCOs are serialized
  as well. References to FCOs are substituted by OIDs.
  <p>
  
  How does serialization work?
  - first we store the OID of the schema
  - then we store the OID of the object. (why?) TODO remove?
  - The we serialize the object in two passes.
  - pass one serializes fixed-size indexable data: primitives, references and String-codes
  - pass two serializes the remaining data.
  
  @param objectInput Input object
  @param clsDef Class definition