Part2: RenderDevice Abstraction Refactor.
This is the second part of fixes for issue #969.

- Refactored Image to be completly abstracted

- Added implemenation of SDLImage derived from Image which now
  owns the SDL specific resource SDL_Surface

- Updated SDLRenderDevice implemenation to use the new SDLImage
  instead of old Image. static_cast<SDLImage *>(Image *) is used
  to get the derived SDLImage pointer.