Rewrite a lot of camera code to be cleaner and support switching underground.
Viewer3D now switches to cab when camera 2, 3 or 4 decides it is underground; doesn't prevent user overriding at any point; switches back to original view automatically but only if user hasn't switched to another camera.
UserInput how reports change in mouse location and middle/right buttons.
git-svn-id: http://svn.uktrainsim.com/svn/openrails/trunk@330 a9f3cfff-6c41-7446-b0ca-052bd761e6eb