Refactor command context creation to use a prototype
Refactor command context creation to use a prototype

Also support custom extensions to command API from plugins.

KaitoV4X/Showdown,ZeroParadox/ugh,lFernanl/Lumen-Pokemon-Showdown,Pokemon-Devs/Pokemon-Showdown,gustavo515/final,BuzzyOG/Pokemon-Showdown,Kokonoe-san/Glacia-PS,DarkSuicune/Pokemon-Showdown,SkyeTheFemaleSylveon/Pokemon-Showdown,ScottehMax/Pokemon-Showdown,Pokemon-Devs/Pokemon-Showdown,scotchkorean27/Pokemon-Showdown,jumbowhales/Pokemon-Showdown,jumbowhales/Pokemon-Showdown,CharizardtheFireMage/Showdown-Boilerplate,KewlStatics/Pokeindia-Codes,panpawn/Gold-Server,Kevinxzllz/PS-Openshift-Server,kuroscafe/Paradox,Irraquated/Pokemon-Showdown,sirDonovan/Pokemon-Showdown,k3naan/Pokemon-Showdown,QuiteQuiet/Pokemon-Showdown,megaslowbro1/Pokemon-Showdown,cadaeic/Pokemon-Showdown,SilverTactic/Dragotica-Pokemon-Showdown,TheManwithskills/Server---Thermal,azum4roll/Pokemon-Showdown,Vacate/Pokemon-Showdown,Firestatics/omega,abulechu/Dropp-Pokemon-Showdown,javi501/Lumen-Pokemon-Showdown,arkanox/MistShowdown,Flareninja/Lumen-Pokemon-Showdown,HoeenCoder/SpacialGaze,danpantry/Pokemon-Showdown,Elveman/RPCShowdownServer,MeliodasBH/boarhat,aakashrajput/Pokemon-Showdown,panpawn/Pokemon-Showdown,ankailou/Pokemon-Showdown,Mystifi/Exiled,SSJGVegito007/Vegito-s-Server,ScottehMax/Pokemon-Showdown,Kevinxzllz/PS-Openshift-Server,DB898/theregalias,ZeroParadox/BlastBurners,brettjbush/Pokemon-Showdown,cadaeic/Pokemon-Showdown,Celecitia/Plux-Pokemon-Showdown,TheManwithskills/Server---Thermal,gustavo515/final,TheManwithskills/Creature-phil-boiler,sama2/Lumen-Pokemon-Showdown,TbirdClanWish/Pokemon-Showdown,TheManwithskills/Dusk--Showdown,Firestatics/omega,megaslowbro1/Showdown-Server-again,hayleysworld/Showdown-Boilerplate,Nineage/Origin,PrimalGallade45/Lumen-Pokemon-Showdown,Enigami/Pokemon-Showdown,DesoGit/TsunamiPS,Vacate/Pokemon-Showdown,CreaturePhil/Showdown-Boilerplate,Zipzapadam/Server,TheManwithskills/Server,TheManwithskills/Dusk--Showdown,TheManwithskills/New-boiler-test,TheFenderStory/Showdown-Boilerplate,Lord-Haji/SpacialGaze,bai2/Dropp,Irraquated/Showdown-Boilerplate,danpantry/Pokemon-Showdown,gustavo515/gashoro,Alpha-Devs/Alpha-Server,hayleysworld/serenity,TheManwithskills/DS,panpawn/Gold-Server,javi501/Lumen-Pokemon-Showdown,Volcos/SpacialGaze,Pikachuun/Pokemon-Showdown-SMCMDM,AbsolitoSweep/Absol-server,QuiteQuiet/Pokemon-Showdown,Mystifi/Exiled,Zarel/Pokemon-Showdown,KewlStatics/Showdown-Template,MasterFloat/LQP-Server-Showdown,Ridukuo/Test,brettjbush/Pokemon-Showdown,Zarel/Pokemon-Showdown,hayleysworld/serenityserver,BuzzyOG/Pokemon-Showdown,urkerab/Pokemon-Showdown,Flareninja/Pokemon-Showdown,JellalTheMage/PS-,SkyeTheFemaleSylveon/Pokemon-Showdown,KewlStatics/Alliance,lAlejandro22/lolipoop,Sora-Server/Sora,ZeroParadox/ugh,JellalTheMage/Jellals-Server,forbiddennightmare/Pokemon-Showdown-1,KewlStatics/Shit,lFernanl/Pokemon-Showdown,kuroscafe/Showdown-Boilerplate,Wando94/Spite,ShowdownHelper/Saffron,ShowdownHelper/Saffron,TheManwithskills/Server,theodelhay/test,MasterFloat/LQP-Server-Showdown,Wando94/Spite,yashagl/yash-showdown,AustinXII/Pokemon-Showdown,anubhabsen/Pokemon-Showdown,AustinXII/Pokemon-Showdown,TheManwithskills/New-boiler-test,MeliodasBH/boarhat,Lord-Haji/SpacialGaze,SilverTactic/Dragotica-Pokemon-Showdown,gustavo515/batata,MayukhKundu/Flame-Savior,abrulochp/Lumen-Pokemon-Showdown,zczd/enculer,yashagl/pokemon-showdown,AustinXII/Pokemon-Showdown,abrulochp/Dropp-Pokemon-Showdown,SilverTactic/Showdown-Boilerplate,Ecuacion/Pokemon-Showdown,AnaRitaTorres/Pokemon-Showdown,Mystifi/Exiled,urkerab/Pokemon-Showdown,Neosweiss/Pokemon-Showdown,megaslowbro1/Pokemon-Showdown,azum4roll/Pokemon-Showdown,ehk12/coregit,Ecuacion/Pokemon-Showdown,CreaturePhil/Showdown-Boilerplate,KewlStatics/Alliance,xfix/Pokemon-Showdown,bai2/Dropp,BlazingAura/Showdown-Boilerplate,Articuno-I/Pokemon-Showdown,zczd/enculer,TheDiabolicGift/Lumen-Pokemon-Showdown,Wando94/Pokemon-Showdown,PrimalGallade45/Dropp-Pokemon-Showdown,SilverTactic/Showdown-Boilerplate,AWailOfATail/Pokemon-Showdown,EmmaKitty/Pokemon-Showdown,Guernouille/Pokemon-Showdown,Enigami/Pokemon-Showdown,Sora-Server/Sora,svivian/Pokemon-Showdown,sirDonovan/Pokemon-Showdown,Alpha-Devs/OmegaRuby-Server,NoahVSGamingYT/Pokemon-Showdown,abulechu/Dropp-Pokemon-Showdown,ehk12/coregit,AWailOfATail/awoat,Elveman/RPCShowdownServer,xCrystal/Pokemon-Showdown,kupochu/Pokemon-Showdown,JellalTheMage/Jellals-Server,ZestOfLife/FestiveLife,ehk12/bigbangtempclone,PS-Spectral/Spectral,Lord-Haji/SpacialGaze,hayleysworld/serenity,xfix/Pokemon-Showdown,panpawn/Gold-Server,ShowdownHelper/Saffron,hayleysworld/serenityc9,KewlStatics/Showdown-Template,TheManwithskills/serenity,Sora-League/Sora,CreaturePhil/Showdown-Boilerplate,abulechu/Lumen-Pokemon-Showdown,superman8900/Pokemon-Showdown,xfix/Pokemon-Showdown,ZestOfLife/PSserver,panpawn/Pokemon-Showdown,ankailou/Pokemon-Showdown,AbsolitoSweep/Absol-server,xfix/Pokemon-Showdown,Guernouille/Pokemon-Showdown,aakashrajput/Pokemon-Showdown,Hidden-Mia/Roleplay-PS,Sora-League/Sora,HoeenCoder/SpacialGaze,TheDiabolicGift/Showdown-Boilerplate,TheDiabolicGift/Lumen-Pokemon-Showdown,TheDiabolicGift/Showdown-Boilerplate,TheFenderStory/Showdown-Boilerplate,piiiikachuuu/Pokemon-Showdown,svivian/Pokemon-Showdown,TheManwithskills/Creature-phil-boiler,gustavo515/gashoro,sama2/Lumen-Pokemon-Showdown,MayukhKundu/Flame-Savior,AWailOfATail/Pokemon-Showdown,Ridukuo/Test,Irraquated/Showdown-Boilerplate,ehk12/bigbangtempclone,KewlStatics/Pokeindia-Codes,Nineage/Origin,DesoGit/Tsunami_PS,jd4564/Pokemon-Showdown,JennyPRO/Jenny,svivian/Pokemon-Showdown,SolarisFox/Pokemon-Showdown,MeliodasBH/Articuno-Land,KaitoV4X/Showdown,yashagl/pokemon-showdown,Lauc1an/Perulink-Showdown,zek7rom/SpacialGaze,megaslowbro1/Pokemon-Showdown-Server-for-megaslowbro1,DarkSuicune/Kakuja-2.0,abrulochp/Lumen-Pokemon-Showdown,CharizardtheFireMage/Showdown-Boilerplate,jd4564/Pokemon-Showdown,hayleysworld/Showdown-Boilerplate,hayleysworld/serenityc9,Celecitia/Plux-Pokemon-Showdown,Articuno-I/Pokemon-Showdown,Firestatics/Firestatics46,psnsVGC/Wish-Server,gustavo515/test,DB898/theregalias,Zipzapadam/Server,kuroscafe/Showdown-Boilerplate,Irraquated/Pokemon-Showdown,megaslowbro1/Pokemon-Showdown-Server-for-megaslowbro1,AnaRitaTorres/Pokemon-Showdown,yashagl/yash-showdown,EienSeiryuu/Pokemon-Showdown,NoahVSGamingYT/Pokemon-Showdown,Wando94/Pokemon-Showdown,xCrystal/Pokemon-Showdown,Pablo000/aaa,MeliodasBH/Articuno-Land,gustavo515/batata,Volcos/SpacialGaze,TheManwithskills/serenity,Alpha-Devs/Alpha-Server,abrulochp/Dropp-Pokemon-Showdown,ehk12/clone,superman8900/Pokemon-Showdown,Enigami/Pokemon-Showdown,Hidden-Mia/Roleplay-PS,QuiteQuiet/Pokemon-Showdown,Neosweiss/Pokemon-Showdown,BlazingAura/Showdown-Boilerplate,sama2/Dropp-Pokemon-Showdown,theodelhay/test,anubhabsen/Pokemon-Showdown,Bryan-0/Pokemon-Showdown,BuzzyOG/Pokemon-Showdown,Pikachuun/Pokemon-Showdown,lAlejandro22/lolipoop,SolarisFox/Pokemon-Showdown,scotchkorean27/Pokemon-Showdown,PS-Spectral/Spectral,Alpha-Devs/OmegaRuby-Server,JellalTheMage/PS-,Pablo000/aaa,piiiikachuuu/Pokemon-Showdown,EmmaKitty/Pokemon-Showdown,Git-Worm/City-PS,zek7rom/SpacialGaze,kotarou3/Krister-Pokemon-Showdown,PS-Spectral/Spectral,sama2/Dropp-Pokemon-Showdown,TheFenderStory/Pokemon-Showdown,k3naan/Pokemon-Showdown,RustServer/Pokemon-Showdown,kuroscafe/Paradox,Bryan-0/Pokemon-Showdown,PrimalGallade45/Dropp-Pokemon-Showdown,Sora-League/Sora,Pikachuun/Pokemon-Showdown,PrimalGallade45/Lumen-Pokemon-Showdown,ZestOfLife/PSserver,AWailOfATail/Pokemon-Showdown,xCrystal/Pokemon-Showdown,Sora-Server/Sora,ehk12/clone,TbirdClanWish/Pokemon-Showdown,Firestatics/Firestatics46,TheManwithskills/DS,HoeenCoder/SpacialGaze,kupochu/Pokemon-Showdown,sirDonovan/Pokemon-Showdown,lFernanl/Zero-Pokemon-Showdown,lFernanl/Zero-Pokemon-Showdown,Flareninja/Showdown-Boilerplate,ZestOfLife/FestiveLife,PauLucario/LQP-Server-Showdown,EienSeiryuu/Pokemon-Showdown,TheFenderStory/Pokemon-Showdown,Firestatics/Omega-Alpha,Pikachuun/Pokemon-Showdown-SMCMDM,DesoGit/Tsunami_PS,PauLucario/LQP-Server-Showdown,Ecuacion/Lumen-Pokemon-Showdown,Kokonoe-san/Glacia-PS,Flareninja/Showdown-Boilerplate,DarkSuicune/Kakuja-2.0,DarkSuicune/Pokemon-Showdown,Lauc1an/Perulink-Showdown,Git-Worm/City-PS,psnsVGC/Wish-Server,Flareninja/Pokemon-Showdown,lFernanl/Pokemon-Showdown,Firestatics/Omega-Alpha,Ecuacion/Lumen-Pokemon-Showdown,gustavo515/test,Syurra/Pokemon-Showdown,RustServer/Pokemon-Showdown,svivian/Pokemon-Showdown,KewlStatics/Shit,Flareninja/Lumen-Pokemon-Showdown,lFernanl/Lumen-Pokemon-Showdown,hayleysworld/serenityserver,svivian/Pokemon-Showdown,arkanox/MistShowdown,kotarou3/Krister-Pokemon-Showdown,ZeroParadox/BlastBurners,jumbowhales/Pokemon-Showdown,DesoGit/TsunamiPS,DesoGit/Tsunami_PS,TheManwithskills/COC,HoeenCoder/SpacialGaze,forbiddennightmare/Pokemon-Showdown-1,Enigami/Pokemon-Showdown,SSJGVegito007/Vegito-s-Server,urkerab/Pokemon-Showdown,AWailOfATail/awoat,Syurra/Pokemon-Showdown,megaslowbro1/Showdown-Server-again,TheManwithskills/COC,JennyPRO/Jenny,aakashrajput/Pokemon-Showdown,Irraquated/Pokemon-Showdown,Zarel/Pokemon-Showdown,abulechu/Lumen-Pokemon-Showdown,xfix/Pokemon-Showdown