Reducing public access to map internals

Overall goals here:

* Remove public accessor to internal map members
* Reduce/remove circular dependencies between Map <-> Source/TileData
* Reduce use of shared_ptr