Restore support for negative healing.

The 1.10 implementation did not rule this out, so I've (finally)
tried to restore what 1.10 allowed, with slightly better accounting
of multiple sources of negative healing. I don't know if this is
the best thing to do, but some UMC authors wanted it back. (They
did not want it enough to answer my questions about it, though.)
Convert game_events::manager from struct to class.
Change the vector of event handlers to be of pointers.

This is the first of a set of changes intended to improve event
handling. (This change by itself is not beneficial.)
Ignore disabled handlers when checking for existing ids and logging.

Before this update, you could have a one-time-only event with an id
fire, then attempt to add another event with that same id. Whether
or not the second event would stick depended on whether or not the
game was saved and reloaded between the first event firing and the
second event being added.
Support null pointers in handler_vec.

I'll get to introducing those null pointers soon enough.
This is more prep work. The null_handler is a temporary measure
so the intermediary commits don't blow up.
Remove handlers by pointer resets instead of erasing vector elements.

This eliminates erasing from active_, which will be useful for the
next few commits.
Disable event handlers by removing them.

One benefit is that fewer places in the code need to remember to
check for the handler being disabled. There should also be reduced
memory consumption after playing for a while.
A new interface for iterating over events of a given name.

This is part of an attempt to black-box the storage of event handlers.
Move some initializations outside a loop.

The old way made sense with the old loop structure, but with the
new implementation, this way is just as easy and may be easier to
parse by people looking at this file for the first time.
Event handler buffering is no longer needed.

Fixes bug #18713.
Code simplification made possible by previous commit.