Model Resource Caching

This branch provides a modification the internals of the Model class.
Now there is a clear separation between a model and its resources used by the GPU (shaders, textures, vertex arrays, etc).
This means that it is now possible to load multiple instances of the same model without requiring reloading the whole model again, and without wasting gpu resources having multiple copies of the same things.

In order to preserve backwards compatitibility, the previous system will still work as usual. In order to make use of the new caching system, the programmer will have to create a ModelResourceCache and pass it inside the options when creating a new Model.
Currently models resources are cached by URLs (meaning Models loaded from the same URL will reuse the same assets if they are sharing a cache instance).