Rewrite sprite handling.

This introduces a common interface for sprite parsers and a utility class which identifies the type by inspecting the data.  The sequence and terrain code now use the common interface and lose their special-case hacks.

The main improvements are:
* shp(td)/shp(ts)/shp(d2)/r8/tmp(td)/tmp(ra) are supported for both terrain and sequences.
* OpenRA.Utility --png supports all of the above, and now generates a set of frames instead of a strip.
* OpenRA.Utility --shp takes a set of frames instead of a strip.
* Kills the pile of hacks that previously supported .r8 and shp(ts).
* Significantly simplifies adding additional sprite types in the future.

This *should* be relatively low risk, as any errors (wrong filetype identification being the main one) would trigger a crash at the loadscreen.  There isn't a lot of room for subtle errors to live the sprite plumbing.