Make hurt() always call die() if the monster is dead

This has bugged me to no end previously: hurt() would return true if a monster was killed and then hope that someone else would call die(). Which *usually* happened, but not always (see that one issue about zombies vanishing in fires).

I moved the die() call into hurt() and removed now-extraneous calls to die(). Should fix/prevent any more problems relating to monsters dying without producing a message, corpse, or other effects.

There's also a fail-fast check now in die() so that if a monster is already dead it won't double-die and drop multiple corpses, items, etc. (Shouldn't happen any more, but it's future-proofing and good error handling).