Turns out that if libgdx calls dispose() on you and you keep a reference
to a ShaderProgram, that shader will become weirdly broken if the app
re-launches.
Assorted refactoring - add a texture region to the palette manager and dispose more stuff.