tidy cnc mod dll
Create a separate FrameCache for caching sprite frames.

We split the caching SpriteLoader into a SpriteCache and FrameCache. SpriteLoader instead becomes a holder for static loading methods.

Only a few classes loaded sprite frames, and they all use it with a transient cache. By moving this method into a new class, we can lose the now redundant frame cache, saving on memory significantly since the frame data array can be reclaimed by the GC. This saves ~58 MiB on frames and ~4 MiB on the caching dictionary in simple tests.
Fixed ICrushable not being triggered properly
Fix HQ rules in nod03a and nod03b.
Merge pull request #6741 from Mailaender/tidy-cnc-dll

Tidied the Tiberian Dawn mod DLL
Merge pull request #6767 from huwpascoe/crush-fix

Fixed ICrushable not being triggered properly
Merge pull request #6769 from pchote/fix-nod3-hqs

Fix HQ rules in nod03a and nod03b.
Merge pull request #6758 from RoosterDragon/fix-spriteloader-overcache

Create a separate SpriteFrameLoader for caching sprite frames.
Fix issues in ScriptTriggers' Clean method

* fixes a memory leak
* moves the cleanup into a FrameEndTask to avoid collisions with the
  trigger iterator (fixes #6747)
More Lua API enhancements
Add production support to the new Lua API
Port gdi04a to the new Lua API
Port gdi04b to the new Lua API
Port Intervention to the new Lua API