Fixup glNormalPointer offset, move client state out of render loop, initial CPP version

From reading the man pages for glVertexPointer and glNormalPointer they shouldn't be used inside of glBegin() / glEnd() - so I've moved them out into the buffer setup and teardown routines along with the glClientEnableState bits.

See the "Notes" section in both glVertexPointer and glNormalPointer.

At the moment the CPP version is a horrible frankenstein creature between the C and something closer to CPP.

They look like cubes now :-)