libcommon: Continued work on remodeling saved game writing/reading

Moved MapStateWriter/MapStateReader into new source files and applied
the pimpl idiom. All map data write/read routines now take pointers
to these classes. Each provides access to any relevant utility funcs
and/or data structures (e.g., MaterialArchive).