Bullet physics part 1

Adding Bullet as optional physics engine. Bullet is not required -- the build will work without and everything should work as normal.  If Bullet is found then a Bullet simulation will be used for entity collisions, however only two shapes are currently supported:  boxes and perfect spheres.

The main purpose of this PR is to merge some work that has been in progress for a couple months, in preparation for more.  

The noteworthy bits are:

(1) Bullet is optional -- the build should work fine without it and everything should work as normal.

(2) If Bullet is found then a Bullet simulation will be used only for entity collisions, however only two shapes are currently supported:  boxes and perfect spheres.  There is no support yet for avatar collisions in Bullet.

(3) Some of the legacy physics stuff has been moved back into the shared lib temporarily until it can be removed entirely.  This has been done so that entities lib doesn't depend on physics lib -- instead physics depends on entities.  Eventually all ray-trace and collision checking will be done by Bullet and we can remove our basic shape and ray-trace implementations.
ShapeInfo is just a type and a list of vectors.  Knowledge of how to pack/unpack the data is hard coded into ShapeInfo methods.  This makes it easy to compute the DoubleHashKey of a shape's representation.