Make chunks allocated flat.

More efficient memory usage, probably faster accesses, and less GC pressure.
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.
Move persist logic into own package in anticipation of upcoming complexity.

Also cleanup main.go- it was getting far too long.
Working, if naive, persist implementation.

Currently blocks the server mainloop waiting for disk I/O whenever a chunk
is generated or a block changes, causing a short (5-15ms on my machine) lag
spike.

There's at least a couple of easy future optimizations we can do:

1) Not blocking the server mainloop
2) Keeping around a transaction log (in memory and possibly periodically
   flushed to disk) So you don't have to rewrite the whole chunk every
   time you change a block
Make the directory on bootup, don't crash if we can't save.
Move serialization/deserialization into own file.
Remove duplicatetion of coords.Offset -> index code.
Don't print error messages when chunks are loaded (i.e. generated).

And some other minor comments from codereview.
Add configurable flag for world storage directory.
Add ability to turn off persist if desired (since it's still very poorly implemented :).
Fix a bug in the persist code when specifying a custom world name.
Add BLOCK_SPAWN. This introduced a regression.

I'm trying to track down the regression, but it doesn't look easy,
so I'm committing the semi-working state first.
Fucking JavaScript. === is higher precidence than &.
Move the chunk->[]spawn cludge solely into world.

Nobody else should have to endure this.
Fix out-of-bounds array panic in item code.

return ITEM_NIL instead.
Make the spawn block solid but unmineable. Fix logic re mineable.
gofmt
Remove unused function
Don't be sloppy.
Don't hardcode constants.