Refactor: Remove all uses of chunk.compress and related methods.

MCServerChunkGenerator was moved to minecraft_server.py
Some strings were changed from single- to double-quoted while removing statically declared tag names.Submodule pymclevel updated.

Submodule pymclevel:
    > f4b4091 - Fixed: Statement seems to have no effect
    > b7ce019 - Fixed: Remove redundant parentheses
    > 55c2369 - Fixed: Incorrect call arguments
    > bca5e18 - Fixed: Default argument value is mutable
    > 6fa9249 - Refactor: Remove dead class members.
    > 79f4e1a - Refactor: Remove dead function.
    > a749389 - Fixed: Comparison with None performed with equality operators
    > 670bb46 - Refactor: Move MCServerChunkGenerator and related classes and functions to a new file minecraft_server.py
    > 0b55db7 - Refactor: Remove tag names statically declared as string constants.
    > 50f9ee5 - Add .gitattributes with core.autocrlf
    > 78e45ae - Refactor: Remove compressedChunks and related methods and data from MCInfdevOldLevel and AnvilChunk
Refactor: Remove call to removed function chunkFilenameAt.

Submodule pymclevel updated.

Submodule pymclevel:
    > 38cd052 - Refactor: Reorder members and methods of MCInfdevOldLevel to place related methods closer together.
Refactor: Remove call to removed method chunkFilename

Submodule pymclevel updated.

Submodule pymclevel:
    > 428a950 - Refactor: Simplify ZipSchematic code and move it to schematic.py
    > 36e7972 - Fixed: AnvilWorldFolder.getRegionFilename calls getFolderPath to ensure the folder exists
    > 208ba76 - Fixed: Call sanitizeBlocks when saving a chunk.
    > 85d79d6 - Normalized line endings
    > 28209fe - Refactor: Move chunk and region loading code out of MCInfdevOldLevel into a new class.
    > 8d0f6c0 - Change pocket_test to load an Anvil world instead of an MCR world.
    > 89c535f - Refactor: Change TagProperty to accept either a value or a function for the default value.
    > 81f5bbf - Test: testServerGen asserts that the newly created chunk contains any non-air blocks.
Debug: Disable some noisy prints
Refactor: Move createBrushMask to global scope
Refactor: Rearrange the main loops in BrushOperation.perform to have the chunks on the outer loop and the brush points on the inner loop.

This reduces the number of calls to getChunk which can avoid causing chunks to be loaded and unloaded constantly.
BrushMode.performAtPoint is split up into apply, applyToChunk, and applyToChunkSlices
Some modes need to use apply to just loop over the points without looping over any chunks.
dirtyBoxForPointAndOptions renamed to brushBoxForPointAndOptions
Fixed: BrushOperation._perform correctly skips over absent chunks.
Fixed: filterdemo.py lies. Block by block access DOES mark the chunks for lighting.
Submodule pymclevel updated.

Submodule pymclevel:
    > 6cde200 - Fixed: Log the exception in materials.py when pkg_resources fails to load a yaml file.
    > 03c6baa - Add dist/ to .gitignore
    > c62bc96 - Build: Merge setup_nbt.py into setup.py.
    > 7b3a599 - nbt: gunzip calls GzipFile now instead of zlib.decompress.
    > 2712e29 - Refactor: Clean up imports in nbt and _nbt
    > 5b5f399 - Test: Move the extended HeightMap test from mcr_test to anvil_test and give it a better name.
    > b0f7d59 - Test: Add uncompressed NBT file and NBT file modified by NBTExplorer.
    > 894ff7a - Server: ChunkNotPresent error while copying chunks now chains exception tracebacks.
    > df75222 - Test: testDeleteChunks asserts that the chunk is no longer present.
    > adb6b7b - Test: Place temporary copies of testing files into their own subfolder.
    > 6713404 - Storage: Modified, unsaved chunks are stored on disk instead of being retained in memory.
    > 94bfb1a - Fixed: deleteChunk removes the given chunk from allChunks and marks the world for recalculating its bounds.
    > 5ed8c3d - Backend: Add listDirtyChunks to let MCEdit find out which chunks to redraw after saving and relighting the level.
    > 5b921d7 - Backend: Split AnvilChunkData apart from AnvilChunk.
    > b2c8046 - Refactor: Removed now-unused fake "filename" attribute from AnvilChunk
    > 10ed3a6 - Refactor: Move chunk.sanitizeBlocks to global scope.
    > f9bd070 - Debug: Little script to run nbt tests with and without _nbt.pyx built.
    > 5f8d9e6 - Fixed: Newly created chunks create the HeightMap array with the correct byte order.
    > 4629531 - Debug: Add test case for Primordial Desert generator.
    > cc20115 - Debug: Add test to measure time taken for level.generateLights
    > 8f782ec - Debug: Add MCRegionFile.__repr__
    > d9d49eb - Fixed: Chunk.bounds now returns a sensible bounding box for its position in the world.
    > 1c6c307 - Fixed: AnvilWorldFolder won't accept a non-folder path but will create a folder for a nonexistent path.
    > 124e338 - Refactor: Change chunk.save() into chunk.getSavedData(). Remove world._saveChunk.
    > 75ae4a3 - AnvilChunk no longer calls world._loadChunk. Instead, the world passes the chunk's root_tag to the chunk's initializer.
    > 78f473e - Fixed: Change dtype of HeightMap in newly created chunks to uint32
Fixed: Now that modified chunks are cached to disk, don't override the loaded chunk limit any more.
Fixed: Import from pymclevel.minecraft_server and not minecraft_server

My Pycharm project has mclevel/pymclevel marked as a source root, so automatic imports are relative to that folder. xxx fix it.
Debug: Set up logging before doing the majority of imports to catch early logs.
Fixed: FBO contents showing in the bottom left corner for a single frame.
Refactor: Recent changes in pymclevel require some changes.

Use getChunkSlicesForBox to compute slices.
blockReplaceTable is moved to block_fill.py
adjustCopyParameters is moved to block_copy
info() was accidentally imported from some unknown module (wat? stop using wildcard imports!)

Submodule pymclevel:
    > 35bbbdc - Refactor: Change log statements to use `log.info()` instead of `info=log.info; info()`
    > ecac4fa - Refactor: Move fillBlocks into its own file and remove "fillBlocksFinite" implementation.
    > a7fd3ed - Refactor: Move copyEntitiesFrom logic into copyBlocksFrom and remove "copyEntitiesFromFinite" implementation.
    > b0ef494 - Test: copyBlocksFrom no longer fails if the requested box is partially out of the source level's bounds.
    > 459b208 - Indev: Now separates LocalPlayer from Entities on load and reinserts it on save.
    > 14f5343 - Test: Improve copyConvertBlocks to count entities copied
    > ea585d7 - Test: test_mcr no longer re-runs TestAnvilLevel.
    > cf51ef4 - Refactor: infiniteworld.py: Change log statements to use `log.info()` instead of `info=log.info; info()`
    > f36634b - Refactor: Move copyBlocksFrom and supporting methods to its own file and simplify them.
    > ded3b8f - Refactor: Remove redundant code for setting an anvil world's Height.
    > 93ccf9d - Refactor: Change a chunk's Height to reference the Height of its containing world.
    > fe03b70 - Entities: Fixed Tile positions when copying and rotating ItemFrames
BoundingBox is now immutable, and use the new Vector for adding, subtracting, and rescaling positions.

Submodule pymclevel updated.

Submodule pymclevel:
    > 07c8024 - BoundingBox: Made BoundingBox immutable and added immutable Vector class
    > f5e4fd1 - FakeChunk now uses TAG_List for its fake Entities and TileEntities instead of lists.
    > 3e4a9b8 - NBT: TAG_List now accepts item assignment using slices.
    > 30cfb1d - Test: testFillBlocks calls fillBlocks with a blocksToReplace argument
    > 3fb1b0c - Fixed: Scan the unsaved work folder and _loadedChunkData in addition to the world folder when listing chunks.
    > fae5e61 - Fixed: Scan the unsaved work folder in addition to the world folder when listing chunks.
Build: setup.py now calls pymclevel/setup.py, now that setup_nbt.py was merged into it.
Fixed: Erosion brush had a misaligned destination point, causing results to be badly skewed in one direction.
Cleanup: Tabs to spaces
Test: Added script to create a 500MB test world for testing memory usage.

500MB is around 10 gigs uncompressed.