Fixed compilation with DMD 2.064.

I was using a tuple like (GameState, ALLEGRO_EVENT) as the key in an
associative array. This started to cause runtime errors after I
upgraded to DMD 2.064. I couldn't reproduce the problem in a simple
example (it just worked with my simple examples), so the problem
seemed deeper than I was desiring to delve.

So I just decided to use pointers to 'GameState's instead of the
'GameState's themselves. I had to take some extra precautions (e.g.,
to tell the GC to not move these 'GameState's around the memory), but
otherwise the solution was simple to implement.

So a hackish commit, involving some (too) low-level stuff (setting
flags used by the garbage collector, bah) but which allows me to work
again in the stuff I really want to work in.