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)

> But also note that PerspectiveTransform.inverse is broken in master; it does not undo the perspective division. (did we already discuss that? I forget.) 

I added code for the inverse perspective transform, which seems to work.

> Shouldn't that work?

OMG, yes it does seem to work. Here am I, making it hard on myself while I could just have used `transforms.visual_to_document` :/

> view_tr_i = view_tr_f.inverse

Would it not be better get this from the cache as well, since the inverse will now have to be calculated on each draw?