Without reading the whole thread, it appears you want a way to define groups of units that spawn, with some fine control over it, yes?
Python control may be a quick way to do it, but likely to be fairly inefficient (entirely due to communication between the engine and python; Nothing to do with how any code may be written). We have a similar setup in Rise from Erebus (and have had it for half a year

), done in the DLL; You are welcome to merge it if you'd like.
Essentially, it creates a new file in XML/GameInfos, titled SpawnGroupInfos.xml. Within this file you define a SpawnGroup object, listing any units you want to spawn (array form, so you can have multiple units of the same type), any unitclasses (yes, it will take any unit of that class, for more random spawns. Weighted towards whatever the owning civ (barbarian, generally, but not hardcoded) has set as the UU), and commanderunits (a list of commanders for the group, reliant on a separate mechanic in RifE). You can also set promotions for the spawned units, as well as a variety of reqs.
Here's a dummy SpawnGroup object:
Code:
<SpawnGroupInfo> <!-- Dummy -->
<Type>SPAWN_GROUP_TEST</Type>
<Description>TXT_KEY_SPAWN_GROUP_TEST</Description>
<Civilopedia>TXT_KEY_SPAWN_GROUP_TEST_PEDIA</Civilopedia>
<Strategy>TXT_KEY_SPAWN_GROUP_TEST_STRATEGY</Strategy>
<bGraphicalOnly>1</bGraphicalOnly>
<bUnique>0</bUnique>
<bAlwaysSpawn>0</bAlwaysSpawn>
<bNeverSpawn>0</bNeverSpawn>
<bNaval>0</bNaval>
<iPrereqMinTurn>0</iPrereqMinTurn>
<iPrereqMaxTurn>0</iPrereqMaxTurn>
<iPrereqMinAC>0</iPrereqMinAC>
<iPrereqMaxAC>0</iPrereqMaxAC>
<PrereqRitual/>
<iWeight>0</iWeight>
<CommanderUnits/>
<GroupUnits/>
<GroupUnitClasses/>
<GroupPromotions/>
<CommanderPromotions/>
<SpawnTerrains/>
<SpawnFeatures/>
<PrereqTechANDs/>
<PrereqTechORs/>
<BlockTechANDs/>
<BlockTechORs/>
<PyOnSpawn/>
<PyRequirement/>
</SpawnGroupInfo>
Many of the arrays are actually Lists, so you'd need to either convert them, or import the code necessary for lists to work (I'd highly recommend taking it), and the two Py tags utilize CvSpellInterface.py; Would have to make use of a different python file. Probably just define an onSpawnGroupCreated, and use that, rather than tags directly referencing python functions.
Adding a tag controlling the number of turns between spawns shouldn't be hard either; Just an array, size of SpawnGroupInfos, in CvGame(), which is incremented each turn. Spawn logic would need to be rewritten somewhat, but not difficult.
If you're interested, all code can be found by searching "Spawn Groups" in our source files; I document using a very clear comment system.
Code:
/*************************************************************************************************/
/** Spawn Groups 08/05/10 Valkrionn **/
/** **/
/** New spawn mechanic, allowing us to customize stacks **/
/*************************************************************************************************/