Allow building/running tests only (it's a lot faster than building all)
Add more bbox_collision_detector tests.
add bbox_collision_detector test

"smallest_joint_parent can create non-square rectangles correctly"
which I'm using to debug a problem in a reimplementation of zbox!
bbox_collision_detectors test: harmonize & add

harmonize the one_by_one_* numbers and add another test
Move bbox_collision_detector::* ostream operator<< up

...to where bbox_collision_detector::* can use this operator
if they want to (e.g. for debugging with std::cerr <<).
Simplify num_bits_in_integer_that_are_not_leading_zeroes

This seems to have no performance impact, or maybe slightly positive.
Don't store interleaved_bits_.

This saves 24 bytes per zbox, and seems to have a 1-2% performance
boost (testing with stepped_pools).
add pressure_tunnel_ground scenario variation (Eli's work)
refactor: make simple_hills a class

like it probably should have been all along
refactor get_and_erase_random_from_the_(top|bottom) for readability
Use boost::random instead of rand()

I chose mt19937 (mersenne twister) at least for now.  Its only
downsides as an RNG are that each instance takes 2-3kb of RAM/cache,
and that it's not cryptographically secure, neither of which seems
to matter in the current arrangement.

Speed is about the same, maybe a tiny bit faster (which might be
because the boost random implementations can be inlined).

This commit obeys/improves the principle that the simulation should use
no global mutable variables, only variables in class world or other
places.  I believe the simulation is now deterministic, with the
caveats that
(A) moving your bot can change unrelated things' random results
(likely acceptable), and
(B) in simple_hills (a randomly generated map), even moving your
*view* can change what hills will be where (by determining what order
worldblocks are realized to at least CONTENTS_ONLY).
(probably bad. This might be fixable by taking a random seed for
the whole map, hashing the seed together with a worldblock's
coordinates, and passing an RNG initialized with that hash to the
worldgen_function(_t), or similar.)
(C) related to (B), the view-changing code currently uses sin() and
doubles as part of calculating where you're viewing from.  This affects
what worldblocks might be seen and thus initialized to CONTENTS_ONLY.
These doubles can hopefully be expunged someday, too.
  (view_on_the_world::render(), the part leading up to calling
   collect_things_exposed_to_collision_intersecting(), in view_type
   GLOBAL (the else{}), regarding the view circling a centre point)

In laser_emitter::update I fixed a range asymmetry (that didn't
actually have any effect, due to the 'do' loop) and Eli said was
accidental.  I also fixed that loop's indentation.

Alas I had to make
  literally_random_access_removable_tiles_by_height::
    get_and_erase_random_from_the_[top|bottom]()
into template functions and thus put them into the header;
they call
  literally_random_access_removable_stuff::
    get_random()
which also needed templatizing on RNG type.
fix polygon_tester so it compiles (and compiles without warnings)
convert polygon_tester to use boost::random

(polygon_tester still is a terrible mess that should be cleaned up)