Fixes Image Saving and Loading

There was a lot wrong with my image format handling changes before. One of them was that the image saving and loading functions should be able to work with flipped data and only save parts of images. This effectively resolves saving with non power of two textures, except with the PNG format because lodepng is shite and doesn't let you save only part of the data, could be fixed my making graphics_get_texture_rgba let you grab only part of the texture data, which works fine with Direct3D, but not so well with OpenGL where you have to duplicate the data. The TextureStruct also holds the width, height, and full size of the texture implementing the texture_get_width/texture_get_texel_width functions in all graphics systems. All of these changes are reviewed by Josh and implemented the way he wanted them to be done for the most optimal way of handling image data, tested on all graphics systems and several games.