XGM gas mixtures

Gases are now represented in an associatieve list instead of hardcoded variables. 
gas = list("oxygen" = 20, "nitrogen" = 80)
New cleaned up share_ratio(), share_space() and equalise_gases() procs.
Gas can be modified with adjust_gas() or adjust_gas_temp(), with variadic versions available for both. These are documented in gas_mixture_xgm.dm.

New turf proc: assume_gas().  Maps to air.adjust_gas_temp().
Lots of optimizations to processing, fire, lighting, HasEntered() and more.
Zones now process all fire data and existance in one go, fire objects only handle spreading.
Most code has been ported straight so some of it mightn't be ideally structured for the new gas_mixtures.
Same issue with masks here (copypasted Lifes yey).