add missing HarvesterAttackNotifier

closes #6671
document HarvesterAttack- and BaseAttackNotifier
Use the existing SpriteLoader cache for tilesets.
Use SpriteLoader for frame exporting.
Remove --transpose utility command.

The engine has supported transposed sprites for a long time now.
Add plumbing for mod-defined sprite loaders.
Move ShpTD sprite loading into Mods.Common.
Move ShpTS sprite loading into Mods.Common.
Move R8 sprite loading into Mods.D2k.
Move TmpRA sprite loading into Mods.Common.
Move TmpTD sprite loading into Mods.Common.
Move TmpTS sprite loading into Mods.TS.
Move ShpD2 sprite loading into Mods.Common.
Remove the remaining legacy sprite plumbing.
Support tmp(ts) templates with empty tiles.
Fix the legacy map editor.
Fix some bogus cell accesses in Map.
editor: Fix a benign loop-variable-inside-closure issue

The getter is accessed exactly once, at call time.
The setter is stored, and invoked later on losing focus, but we pass a
bogus one anyway, so there is no issue.
filesystem: Fix benign use of loop variable in closure

This closure never outlives a single loop iteration.
LevelUpCrateAction: fix loop variable in closure bug

This was a real bug -- if there were multiple recipients, we'd apply the
levels N times to the last recipient rather than once to each.