Improve texturing flexibility

Re Github issue #91

Improve texturing pipeline to support multitexturing (not included in core, but nigh-essential for any sort of nice shader plugin).

Add getter/setter for GLTextureWrapper.image.

Add TextureAtlas.createGLTextureWrapper to internalise wrapper creation.

Add TextureAtlas.enableGL method to internalise texture binding process. While this could be implemented on GLTextureWrapper, it would not be able to handle texture unit retargeting in the case of multitextures, so must be left to the atlas.

Update GLTextureManager to use new TextureAtlas methods, greatly simplifying uploadTexture().

Add GLTextureManager.registerTextureWrapper method to allow TextureAtlases to register their own wrappers.

Update GLTextureManager.useTexture method to take an optional textureUnit parameter, allowing the use of multiple textures in a single shader.

Update GLTextureManager._freeSpace method to use a new algorithm: remove textures oldest-to-newest until sufficient memory is freed. This should quickly sort textures to optimal memory usage if all assets can fit in memory.

Update GLRenderManager._switchTexture method to use TextureAtlas.enableGL instead of running an immutable single-texture update.