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.
The PositionHashKey was to be used to track voxels that had been added to the physics engine, however I'm 99% sure we don't want to support voxels in the physics simulation going forward, so this will probably be removed.