DRY programmable gl renderer

+ unifies execution paths for matrix multiplication & upload operations.
inline matrix multiplication ops

since these are one-line or indirections in the context of an ideally tight draw loop, inlining should give better performance, esp. on arm systems
fix issue with view matrix not properly uploaded

fixes #3151.

When drawing directly after ```mCam.begin()``` the ```modelViewProjection``` matrix would not have been properly set up.

This because a camera would just update the view matrix, but the view matrix would not automatically update the matrices further up it's hierarchy.

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 View get updated accordingly.
removes inlines
allow flexible view matrix manipulation

+ allow view matrix manipulation independent of current matrix mode
Merge pull request #3153 from tgfrerer/fix-view-matrix-programmable

Fix view matrix programmable