PhotoViewer: Preload image in a different thread.

The PhotoViewer now uses two images, and swaps between them. Whilst one
preloads, the other is showing. There may be a issue if the user moves
through the photos too fast, but that has yet to come up.