Terrain generator

Added a bunch of optimizations and restructuring to the map generation. Caves are hard, so that will be a problem solved another day.
I'm a fan! These are nice interfaces. We could call them Source2, Source3, Source4, etc, so you don't have to type `noise.Noise2Source` (which is redundant), but rather you can just type `noise.Source2`.