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)

That's pretty common. You can simplify it a bit:
```
Tf = [n.transform for n in nodes]
self._vtf = view_tr_f = transforms._transform_cache.get(Tf)
self._vti = view_tr_i = view_tr_f.inverse
```
But also note that `PerspectiveTransform.inverse` is broken in master; it does not undo the perspective division. (did we already discuss that? I forget.)