Fix view matrix programmable

fixes #3151.

When drawing directly after ```mCam.begin()``` the ```ModelViewProjection``` matrix would not have been properly set up (see also: renders & test case in #3151). The same issue might also have led to a virtual one-frame lag in camera updates in some situations.

This because a camera would just update the ```View``` matrix, but this update would not automatically cause the dependent matrices further up it's hierarchy to re-calculate. 

### This PR addresses this issue by:

* DRYing matrix stack code so as to have unified execution paths
* Uploading matrices to the shader in one central location
* Making sure view matrices can only be updated whilst matrixMode == ```OF_MATRIX_MODELVIEW```
* Making sure matrices dependent on ViewMatrix get updated whenever View changes.
i think it's ok to have the loadViewMatrix change the view and model matrices, the idea of modelview/projection/texture matrix state doesn't really exist anymore, even if we maintain it for backwards compatibility the view matrix is independent from that state and at some point i think we should even add methods like this for every matrix so you don't need to use the global state at all.