More natural manipulation:

- Move camera from cube, giving cube natural coordinates.
- Swap order of translation and rotation of camera to make it so that it is like cube is being rotated. However, lighting is still rotating with cube.

Perspective still seems weird.
Tried a different way of computing perspective matrix, but doesn't work at all. (Copied from gl-matrix, a JavaScript util for WebGL).
Moved camera, and swapped direction in which mouse movement changes rotation.  Working nicely now.
Deleted old perspective function.
Changed direction of light so that at start it is shining on face of cube that camera is looking at.
Rotating light direction by inverse of camera rotation.  Sort-of working.

Might still be a problem with the way normals are calculated.  Also, translation is still with respect to object, not camera.
Changed the word "transform" to "translate" where appropriate.
Fixed translation.
Fixed issue on MacOS where CTRL drag caused context menu to appear.  Now ALT drag does the same thing, so that user has option to use either.
Merge Randall's changes from pull request 1 and revert shader changes that are not needed with them.