Changed HardwarePalette.ApplyModifiers to be more efficient.

It will no longer copy the dictionaries or palettes every time, saving significantly on allocations.
Non modifiable palettes are copied to the buffer when they are added, rather than having to be done repeatedly in ApplyModifiers.
The palettesModified flag tracks if the current texture represents unmodified palettes. If it does and no modifications are made then it doesn't have to update the texture at all and can bail early. This is often the case because the paletteMods sequence is usually empty.
I didn't consider that. It certainly wouldn't hurt and ```CopyPaletteToBuffer``` would conceivably benefit from less work on the bounds checks.

If we want to go all out we should transpose the buffer so we can just ```Marshal.Copy``` in the palettes since they'll be contiguous in memory. That would presumably require updating the shaders (also assuming transposing the texture wouldn't be bad for their performance in some way).