BatchRenderer Image Management corrected for newly loaded screens

When a new XML file is loaded with nifty.fromXml() all existing screen
based cache information in NiftyImageManager will now be removed. This
fixes an issue that old images (referenced by old screens with the same
id) are still uploaded to the texture atlas even though they are not
needed in the newly version of the screen with the same id.

The same fixes have been applied when screens are being removed
dynamically with nifty.removeScreen(). So now everything that's being
uploaded to the texture atlas is really only the images that are needed.

It was possible that the onEndScreen() event could be
triggered from a nifty.render() call which in turned would call the
niftyImageManager to unload all the images. And then when the rendering
continued the dynamic upload mechanism was activated that would upload
the images again since they could still be references from other render
calls :) To prevent this issue the onEndScreen stuff is now being
delayed as an EndOfFrameAction which prevents this issue.

So finally with this commit the whole batched renderer and extended
image manager business should be in place correctly.