changed texture cache architecture; now uses NSMapTable with weak references to the textures.

Tests showed that NSCache did not act the way we wanted to; textures stayed in memory too long. Using NSMapTable, the textures are guaranteed to be in memory only once, so we guard against people loading the same texture over and over. When the texture is deallocated, though, it is removed from the cache, as well. That makes this approach more predictable.