Small cleanups.
Split block textures into separate images.

Now using a TextureArrayBuilder to combine seperate Images into one
TextureArray. Also made PNG loading read from a std::istream.
Split GraphicsSystem into an array of Views.

This actually bubbled even more stuff into main, but I'm finally feeling
confident enough to make some high level structure, including the split
into a client/server shared library and client specific code.
Eliminated Renderer.

Now drawing is performed by invoking a ShaderProgram directly.
Introduced BlockVisual, for tesselating a block.

Other BlockVisuals besides SimpleBlockVisual will allow for flowers,
fire, and eventually fences and things with more intelligent
visualization behaviors. Also, this moves visual information out of
BlockType, which will eventually be shared between client and
server (only the client will bother with BlockVisuals).
Added table to std::vector conversions.
TextureArrayBuilder now loads and caches images.

This way, when plugins attempt to load the same image multiple times
they will not get duplicated in the texture array.
BlockVisuals now set up their own textures.
Added downcasting methods to MetatableBuilder.
Moved initialization of BlockVisualRegistry to lua.
Added tall grass block to test PlantBlockVisual
Changed out textures, now from a minetest pack.

Pack is called PixelBOX, from
https://forum.minetest.net/viewtopic.php?id=4990.
Only going to use it for development purposes.
Fixed up use of transparency in plant block.

Unforunately, rather than properly handle transparent objects by sorting
back to front, I added alpha testing to the shader. Eventually gfx will
get an overhaul, maybe become deferred or something as well, and will
handle this efficiently.