MemoryWorld: now dynamically sized instead of fixed.

Main reason for this is to easily support negative coordinates. Rotating coordinates to SIZE/2 would of course work (e.g. SIZE=32 would support coordinates -15 to 15) but then we'd be filling an entire 3d array with size=32 which is a huge waste of memory. Dynamically allocated blocks makes it a lot easier and at the same time just more efficient anyway (not creating blocks that are not used)
Add support for matching signs (wall & post), trap doors, levers, and buttons (stone & wooden) with appropriate tests to confirm.