So it turns out that dungeons and the overworld were being created with space
for 500x500 tiles. This was entirely my doing, and I forget why I didn't just
initialize the TileMatri(ces) dynamically with the given width and height. In
any case, I'm a moron, and chunk generation is now nearly instantaneous. I'm
going to profile with Massif to see what kind of memory we're using now (I
suspect it is several orders of magnitude smaller)