Simplify player modification checks

When playing in singleplayer I noticed that my player wasn't being saved.  I checked the code and found it's modification checking logic convoluted, so I redid it with a simple boolean instead of a bunch of backup objects.  My singleplayer game is saving players now.

Conflicts with #1511.
I use C-style strings because that's what the rest of the code uses for player names.  If you like I could change this, although I can't fix the ugly fixed-width way that player names are sent on wire.  I could increase the maximum player name length to 20 by not requiring a NUL byte though, because the packet field is fixed-width.