Invert the dependencies for world so that we can create our persist layer.

We want the persist layer to be able to intercept the world's chunk generation
requests, and check the disk for previous data before calling into the
generator. To make this wrapping easy, we want the world to take a generic
"map generator", rather than creating one itself. This allows us to easily
write unit tests for the world code, without having to worry about the
filesystem, and still be able to have nice persist behaviour.