Don't free Image surfaces when copying/destroying Sprite objects

This fixes some bugs where surfaces were getting freed early due to STL
container operations. This let's free Sprite graphics when (and only when)
we are done with them. This is how we originally did things; it's just
abstracted through RenderDevice now.

Also in this commit, I have moved the loading of the icons Sprite to
createContext(), similar to what was done in the SDL2 port.