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.
Why not have these methods actually return the converted to type? It appears as if in all uses you're always creating a local variable that you pass to this method by reference. So the pass by reference pattern isn't really saving you a stack variable, since you're always creating one anyway to use it.

I think it will amount in the same amount of stack usage and would be easier to read if you just made all of these something like...

```
inline glm::vec3 bulletToGLM(const btVector3& b) {
    return glm::vec3(b.getX(), b.getY(), b.getZ());
}
```