Make an object's zboxes each store a ptr not ObjectIdentifier.
Make an object's zboxes each store a ptr not ObjectIdentifier.

ztree_node:
-  unordered_set<ObjectIdentifier> objects_here;
+  unordered_set<pair<const ObjectIdentifier, bounding_box> const*>
                                   objects_here;

The pointer points into bbox_collision_detector<>::bboxes_by_object_.
bboxes_by_object_'s members have exactly the right lifetime for this
purpose.
While std::unordered_map *iterators* can be invalidated by inserting
into the container, *pointers* to key/value pairs in it cannot:

n3337 23.2.5 Unordered associative containers [unord.req]
  13. "The insert and emplace members shall not affect the validity
    of references to container elements, but may invalidate all
    iterators to the container. The erase members shall invalidate
    only iterators and references to the erased elements."


This change saves a lot of space* and makes most scenarios a bit faster.
*specifically:
  in 64bits,
  object_or_tile_identifier is currently 32 bytes (due to alignment
    taking its toll in several places), whereas a pointer is just 8 bytes.
  A given object can appear eight times in the ztree, potentially
    multiplying this wasted space: (32-8)=24, 24*8 = up to 192 bytes
    per elem.
Also, this change means not having to do lookups in bboxes_by_object_
  sometimes, which saves a bit of time.

elidupree/Lasercake,Lasercake/Lasercake,elidupree/Lasercake,Lasercake/Lasercake,idupree/Lasercake,idupree/Lasercake,Lasercake/Lasercake,elidupree/Lasercake,idupree/Lasercake,idupree/Lasercake,elidupree/Lasercake,Lasercake/Lasercake,idupree/Lasercake,elidupree/Lasercake,idupree/Lasercake,elidupree/Lasercake,Lasercake/Lasercake,elidupree/Lasercake,idupree/Lasercake