A big commit refactoring the camera controls in 3D viewports used by editors.

This addresses two main issues:
 - The camera control code is no longer duplicated for every 3D viewport.
 - The camera control code is now all in a single location - on the Lua side. Previously it was split between C++ and Lua.

This resolves issue #41.