voxel: Use material table to drive meshing

Support offset and cubify (replicating existing behavior for Rock and Stone; actually Rock is now nicer since it respects occupancy better).
Normal generation is still ad-hoc.
voxel: Stop using srand()/rand()

Just take bits from the random seed.
voxel: Add quantize shape modifier

Also rename 'offset' to 'shift'
Make it easier to tweak material column count, add slopes with different materials to the initial world
shaders: Restore specular support