Hi "mr. quakeone"
#1, Either you can use a engine that uses .ent files, so you can add/remove any entities through a list. Or, you could by QC dynamicly spawn new spawn points uppon mapname.
A hint is to look up "sv_gravity" in world.qc, it shows how to identify a specific map name.
A spawn point is realy nothing more then an entity with origin and direction values, so i dont think you'd have any problems with that. Check client.qc for the "select spawn point" code if you are unsure.
Both inside3d and AI café have good tutors on how to spawn things (
http://www.planetquake.com/minion/)
#2, most of the times you can do it by just 2 lines of code.
entity.think = (void); //void to execute
entity.nextthink = 30; //seconds until execution
"Entity" prolly be self in item code, and there may be if/else statements restricting respawning. Look these up in items.qc
#3, I think weapons already stay in coop. Problem is that by default code one could to an infinite number recharge ammo to max at only one item if it doesnt go away - so you'd have to make a if/then limmit that only allows a player to use the item once every 30 seconds or so.
Check out #qc and #inside3d @ anynet, people usualy helps out. You can also use the java irc client here on inside3d, that autojoins these channels.
Cheers