Savestate / PointerWrap changes

This does a few things:

 * Moves ChunkFile.h out of .h files where possible to reduce .h leakage (reduce compile times on changes.)
 * Makes `p.Do(x)` automatically forward to `x->DoState(p)` for non-pod structs and pointers.
 * Removes some duplicated std::map DoState code to just join the automagical party.
 * Uses `std::is_pod` and `std::is_pointer`, which according to docs exist in MSVC 2010, and I assume everywhere else?
 * Fixes a lot of non-POD usage of `p.Do()` and `p.DoArray()`.
 * Fixes some bugs this automatically found (such as a std::string being memcpy'd...)

Savestates are still working for me (famous last words?), but I haven't really tested compiling it on other platforms.

I'm hoping this may fix problems people have reported with savestates on other platforms.

Let me know if any of the changes look bad.

-[Unknown]