Change isometric rotation so northwest is at the top by default

Since we need to start isometric renders from the top corner, it just
makes sense to have the minimum X and Z values in the top corner instead
of the left.

Also, world image will now skip null region images instead of aborting.
Neighbours, and shadows/highlights seem to work for orthographic maps

Chunks and regions can now read block info from their neighbours.

This means we can now draw highlights and shadows.

Next we'll find a way to use neighbour information to improve
isometric maps.
Enable contour shading for isometric view
Bug fixes and optimizations

- Removed ridiculous memory leak in region render loop where neighbour
chunks were not being freed.

- Optimized this loop by re-using the current chunk and its next
neighbour as the next chunk and its previous neighbour.

- Added a check to the get_path function in world.c.

- Shortened the neighbourfiles variable name.
Merge most isometric and orthographic render functions

This gets rid of a lot of code duplication.

Also got rid of the heightmap rendering functions, finally.

Also fixed a bug in the out-of-bounds check in
world::get_path_from_rel_coords.

Also, the measure_world function was still switching on rotation for no
reason at all, so removed that.
Changed texture struct format; added isometric block side culling

Sides of blocks are no longer rendered if the block in front is opaque.

Now storing shapes inside the texture struct so we can quickly check the
shape ID for a block.

Shapes are currently defined inside the texture source file, but we'll
find a nicer way of doing this.
Pass image buffers forward instead of backward

World will pass its image buffer to region, which will pass it to chunk,
which will draw directly into that buffer.

Previously the chunk would pass an image back to the region, which would
blend it into the region image and pass this back to the world, etc.

This bloats the function signatures a bit but takes out a lot of calls
to memcpy() and combine_alpha().

It also removes some blending artifacts that were showing up in
isometric renders. The fix is visible in the example isometric images
(look for a faint crisscross pattern in the water in previous images).

Also removed a memory leak where ndata[] wasn't being freed.
Add shapes.csv; changes to texture file parsing

Counts for block types and shapes are now read dynamically instead of
hard-coded as constants.

The 'textures' variable has been renamed to 'tex' throughout.

New free_textures() function, as it contains heap-allocated members.
Set line buffering to help the program work with scripts
Improve night mode, optimize isometric mode

Blocks now use the block light value of the block above them, so solid
blocks can be lit from above.

Also the MAX_LIGHT constant was erroneously written MAX_HEIGHT.

In isometric mode, don't calculate the left and right colours until
*after* we've decided if we're even going to draw them. Duh.
Shapes now support multiple colours
Add GPL licence