Put resource loading in a separate function.
Add opensavefile.

It simplifies a few repeated lines in save and load.
*delete this commit*: s to save and z to restore—for now.
Zero the game structs each time gamenew or load is called.
Save the game and player in the same file.
Avoid an unnecessary zoneput.
Rename save and load to gamesave and gameload.

This is more consistent with the rest of the function names.
Save and load the player's current action.
Store the player's direction in an enum instead of a pointer.

This will be necessary for saving the player's direction. We cannot
save a pointer, and we cannot use pointer equality to compute the
player's direction since we copy the Player in some places (the
p->anim pointer will point to the p->leftas or p->rightas field of the
original, not the copy). Additionally, this is more consistent with
how we handle p->act.
Save and load the player's direction.