WIP: Volume rendering

This PR implements volume rendering. It's basically a port of the technique that I use in Visvis.

Todo:

- [ ] make volume available in demo-data
- [x] make rendering work well with perspective camera
- [ ] deal well with anisotropic data
- [ ] make camera information nicely available in vertex shaders, also for e.g. imposters
- [ ] implement other rendering techniques
- [ ] implement clim (contrast limits)
- [ ] efficiency, make sure no program recompilation etc.
- [ ] set camera limits automatically based on visual bounds
- [ ] implement fly-through camera (yes, I want the camera *inside* the volume)

> Would it not be better get this from the cache as well, since the inverse will now have to be calculated on each draw?

Every transform instance has exactly one inverse transform instance, so no caching is necessary. This also means that if you modify the original transform, then the inverse is automatically updated as well.

> Although, I suppose it would break down if between the document and the volume there is another viewbox, which has a transform other than translate-scale only.

In such cases, it will be necessary for the user to set `visual.document = ...` to select the appropriate coordinate system. These will be very rare and advanced cases like the SVG-editor example.