Thread friendly Texture2D

Only texture creation has to take place on the main thread (as decreed
by OpenGL). These changes prepare (scale etc.) the image and package
the texture data as needed into an object which is then turned into the
texture on the main thread. The prepration work however can happen on
any thread. Very handy if using threading to help manage dynamic
resources. doesn't affect normal function. Have been using this in production for a very long time now without incident...