Add the ability to move around with wasd controls.  Store the camera position and a keystate table; use keydown / keyup events (on the document, since the canvas doesn't work correctly) to keep track of key state.  (Work around firefox's weirdness related to MozPrintableKey by ignoring it and using e.keyCode instead if e.key is set to "MozPrintableKey".)  Drop the mat4.copy() call that's not actually needed at the end of mouseMoved (just write directly into vm), and use the new camera_pos variable.  Each render loop, call a new moveCamera function that either returns (if no important keys are pressed) or updates camera_pos and then the view matrix.  Calculate the right vectors to add for forward/backward (depends on the camera_yaw) and right/left (cross product of the previous vector with a unit y vector), and add (or subtract) them if the proper key is down.