Added a stopwatch to the main program.

This allows the user to track over-all program performance.
Corrected two bug in gatherRegionTiles().

The first was that the tiles were being moved instead of copied like the design calls for.
The second was where the destination for the existing region tile copy was not being accounted for correctly.
First working minimum algorithm for creating the zoom tiles.

This was a lot of work.  Originally I was aiming for a simple bottom-up breadth-first operation, but I realized that such would consume a ton of memory.  Less than the original PHP script, but still too heavy. Then I realized I needed a depth-first run, specifically a post-order DFS, to keep the memory usage down. However, since I only had the leaves I still needed the bottom-up breadth-first to create the tree that I would then process using the depth-first code.

My first implementation stored the children directly in the parents and tried to place a pointer to the parent in every child.  The only thing stored in the function was the top-most (root) layer.  Nice and clean.  Too bad the copying was so rank that I could not get a proper pointer.  So after consulting with a couple of other programmers I decided that the "big array" technique was going to get me operating soonest, and getting the logic cleaner can happen later.
Moved the last of the direct config entry reads to the main, and added a new one for the maximum zoom level.