Worked on generation code to speed things up

Generation now initializes the 2D vector once, and does all of the
upscaling in place instead of copying the vector over each time.
Consequently a width and height needs to be passed to the layers so they
know how large the tilemap they are operating on is.

The display while the tilemap is being built is also optimized by only
drawing the tiles to the screen and not repopulating the tilemap after
each layer is applied.

The MarkovModel constructor was reworked a bit to make it easier to
initialize.