Threaded version check with message to main thread to display message.
Fix CG contribution of point mass components.

Despite its name, getTotalTranVec() only calculates the translation of the
component within its own coordinate system.  If the component is connected
to another component, this does not result in the coordinates in absolute
space.

Instead, establish a point at the origin of the local system (a default
vec3d) and then transform it to global coordinates.  The transformation
matrix used already incorporates getTotalTranVec().
Fix bug for CFDMesh half models.

The intersection plane for generating CFDMesh half models was not fully
set up.  This included not setting the GridDensityPtr and allocating a
target map.
Bump version to 2.2.3

Version 2.2.3 contains a triplet of small bug fixes that have bitten
some users.  I have been putting these off waiting for an upcoming
feature release, but now seems to be the time to get these out there.

Bug fixes in this release:
 - Threaded version check
 - Fix CG contribution of point mass components
 - Fix CFDMesh half models when a surface is actually cut

Placing the version check in its own thread allows VSP execution to
continue during the version check.  This is significant for situations
where the computer has internet connectivity, but the VSP web server is
experiencing problems.  The HTTP library used by VSP does not let you
change the timeout from 60 seconds, so in these situations, VSP paused
for 60 seconds on startup.

The CG contribution of point mass components was calculated using their
local translation -- ignoring the translation of any components they were
attached to.  This fix makes their contribution use their actual global
x,y,z position.

When the half model option is selected for CFDMesh, VSP makes two passes at
eliminating geometry in the -Y domain.  First, before any meshing occurs,
surfaces which fully lie in that domain are eliminated.  Then, the
remaining surfaces are sliced by a Y=0 plane.  That intersection line is
obeyed by the mesher, and any triangles whose center point lies in the
wrong domain are eliminated after mesh generation (when interior triangles
are culled).

The second process needs the cutting plane to be a fully-fledged plane,
including a curvature based target map.  Prior testing had only exercised
the first code path (which could complete with an incomplete cutting plane).
This bug basically amounted to some null pointer dereferences and improper
allocation/setup for the cutting plane.