Map 3d conversion WIP

Roadmap:
- [x] Extend `map` to hold several z-levels at once, rather than just the current one
- [x] Handle all z-levels in `map::shift` logic
- [ ] Update map API to support x/y/z instead of x/y coordinates in all accessors/functions
- [ ] Update caller chains of map API
- [ ] Optimize generation of pure sky/rock terrain
Generating is probably the wrong word, I mean allocating. I've actually profiled and with the new submap constructor/destructor, creating more submaps than needed has a significant performance impact.