Store world regions differently

Now using a coordinate map instead of a list. This will make it easier
to find a region's neighbours.

Also replaced some structs' free() calls with macros to make it simpler
to free the members of the struct that need it.
Refactor colour adjustment

We now have a generic function to adjust colour brightness.

Adjusting brightness by height is now in chunk.c where it belongs.

Also replaced some magic numbers with constants, and optimized a bit.
More refactoring

Added image.c along with some utility functions for images

Moved get_block_colour() into render_chunk_blockmap()

Moved some constants

Got rid of some duplicate code in combine_alpha()