Reorganize map management and preview generation

* Map enumeration and the (previously global static) preview generation have moved into a new MapCache class that lives on ModData.
* Map previews are now batched into sheets, instead of using one texture per map.
* UI map access is now wrapped inside a MapPreview object. MapPreview supports multiple states (available, unavailable, and the next pr will introduce downloadable), and these can be updated dynamically without requiring any action by the code using them.

This gives us support for custom map previews (see screenshot), and lays most of the foundations for future resource website integration.

![preview](https://f.cloud.github.com/assets/167819/2429517/1310ea60-ac87-11e3-930b-b0ddfe194569.png)