Allow empty sprites to be allocated.
Add first-class support for non-shp mouse cursors.

All cursors must now explicitly specify a file extension.
Use the normal extension checking rules for .r8.
Rewrite ShpTSReader. Closes #3746.
Define a consistent interface for sprite loading. Fixes #4176.
Make terrain tiles ISpriteSources.
Change Utility --png to accept all ISpriteSources.
Fix D2 shp parsing and make it a proper frame source.
Clean up ShpReader code.
Clean up ShpTSReader code.
Update CHANGELOG.