If we were to add a UnitUpgradeGroup class, how would you name them? Keep in mind that Warrior and Archer will end up in the same group since both can be upgraded to Infantry.
That would probably be dependent on a lot of factors, but calling them "Infantry" certainly makes a lot of sense. In ordinary military terminology, they are all infantry units, whereas Chariots, Horse Archers, etc. all the way up through Gunship are Cavalry (the US Army calls the latter "Air Cavalry" to distinguish from Armor). .
So the main categories are:
LAND: Infantry, Cavalry, Recon, Artillery/Siege, Armor
SEA: Transport (Galley, Galleon), Courier (Caravel, Sub), Light Supremacy (Trireme, Frigate, Privateer, SotL, Destroyer), Heavy Supremacy (Battleship, Missile Cruiser), Carrier ]
AIR: Fighter (I guess this includes Airship), Bomber, Missile
But each of these categories have different naming needs, at least to me. It isn't nearly as important that I distinguish between the 21st and 22nd Panzers as that I can tell which transport they're getting into. It's also far more likely that I'll want a historically-relevant name for a ship than for a land unit. Germany building a Battleship and having it be named the "Bismarck", or the US having a Frigate named "Bonhomme Richard" creates a far higher awesomeness factor than "123rd Infantry (Atlanta)".
The Civ3 idea that you name your elite units fits here. I'd probably want to have a separate RE-naming system that kicks in when a unit hits a certain promotion level, so that the best US fighter unit might earn the name "Tuskeegee Airmen" appended to, or instead of, "45th Fighter Squadron".
But back to ships... That reminds me of an interface improvement I'd like to see. In the standard interface, as you can see on the top of this picture, it is not possible to determine whether the Panzers are in the Transport or merely sleeping in the city. I can't tell you how often I've sent a transport out to sea only to notice someone got left in port. I'd like to see units carried inside another unit to have their icons pushed down a few pixels, and possibly have some kind of box around them as in this picture. In the lower sample, you can see that the first two Panzers are loaded in the Transport, but the third is not. I haven't begun to poke around in the code to see if that's doable in Python or requires .DLL changes. I miss the Civ3 interface's explicit identifications like "Panzer in T-2 Karl der Große"; if the hover text said something like that it would be really cool.