So the snapshot method records all module state - even the state that is part of a prototype's definition.  So when we initialize the database from the input file, we first initialize prototypes and then build initial agents via the context's CreateModel.  This works because agents' only state that needs to be initialized is their prototype-defined state.  Then we snapshot all built-agents' state to the databse - this snapshot includes all of the prototype state.

When we initialze a built agent from the database, All information about the agent's state including what was part of the prototype definition exists as part of that agents (referenced by its id) info in the db.  So if we initialize from prototype, then what happens is this:

* the prototype was initialized from the db (it's InitFrom(db) was called)
* The prototype is cloned to make the new agent - this is equivalent to creating a new instance with DynamicModule::Make and then calling InitFrom because the clone operation clones all the state that InitFrom(db) retrieved
* Then the the clone's InitFrom(db) was being called

Resulting in the equivalent of InitFrom being called twice for an agent (even though it was actually only called once).