Frustum culling and improved draw cost model

Implement frustum culling for point clouds using a new ClipBox class.
Having frustum culling can result in a large variation in the amount of
geometry processed per frame as the user moves the camera.  As a result
this required a big rework of the model draw quality handling.

Included here is an attempt to model the quality as a function of number
of vertices and fragments drawn, plus a constant offset term (the
DrawCostModel class).  This yet work entirely reliably because solving
for the relative cost coefficients between fragments and vertices can be
an poorly conditioned problem - may need to go back to something
simpler.
Move to a more robust and simpler draw cost model

Revert to a simple cost model based purely on the number of point cloud
vertices drawn as a function of quality.  This is much easier to make
robust than a multidimensional cost model, due to difficulties fitting
the parameters of the multidimensional model.

Also included various cleanups to comments etc.
Merge branch 'draw_quality_refactor'