WIP: Volume rendering

This PR implements volume rendering. It's basically a port of the technique that I use in Visvis.

* New Volume visual with two rendering styles (iso and mip). 
* Volume example in examples/scene/volume.py Try it, and use the keys to switch cameras etc.
* Refactored cameras a bit in general
* Refactored TurnTableCamera: no more mode and distance. You can just change the fov while getting the same zoom level. Setting fov to 0 means orthographic. Zooming is done by moving camera backward.
* New FlyCamera to fly around your data. 

This is about ready. There are more things to do, but that can be picked up in another PR. (I added todo items for this in volume.py)

I wish to do more with the camera's, but we should probably discuss this first. Will make a new issue for this.

I dunno.. it seems this makes some strong assumptions about the ways people will want to use the cameras in their applications. It's likely users will bring their own expectations about how the user interface should work, and we don't really save them much effort by doing this:
```
trackball = TrackballCamera(fov=60, up='z')
turntable = TurntableCamera(fov=90, azimuth=45)
viewbox.camera = trackball
```
Isn't it better to let them decide how many cameras they want, and how to refer to them? For example, it seems more likely that when switching between different camera types, they will want to preserve as closely as possible the current viewpoint, rather than just switching back to the last viewpoint used by a particular camera.