Document bbox_collision_detector & add size()

Its purpose, its overheads, and its computational complexities.

We add size() mainly so that the n in O(n) makes more sense,
and because it's trivial to.
Move world physics constants/types to their own file.

This makes moving the tile_coordinate/fine_scalar conversions
to their own file possible (probably we'll add them to tiles.hpp
so there aren't too many small files to keep track of).
Move tile_coordinate<->fine_scalar conversions to tiles.hpp.

More specific places are good (and this piece of code is going
to get bigger soon).

It wasn't necessarily part of tiles.hpp before to have a concept
of fine_scalar space at all.  But I think it's okay for it (and
only this section of it, at that!) to have such a concept.
revert accidental laser location change

(I'd accidentally committed moving the lasers from 10 to 12 in X and Y
in [83bfce83 - require a cmdline switch to turn on the crazy lasers],
which changes pressure_tunnel behavior some - it moves the lasers'
starting position to outside the tower of water.)
Fix beam_first_contact_finder virtual method naming.

I don't notice any practical effect from making this change

(I did check that I'm now overriding by using C++11 'override'
contextual-keyword, which I'm not leaving in the commit because
not enough compilers support it and the benefit of leaving it
there seems small.  We don't use virtuals/overriding enough to
make too many of these mistakes.)

It turns out that the laser irregularities I was noticing
mostly had to do with other uncommitted changes I had [and have
not committed as of this commit].  I think the lasers are fine
before and after this commit, and after those will-be-committed-next
changes too - it was probably some intermediate state screwing
things up.
refactor if conditions order
Add debug printing of ztree summary information.
Allow higher viewing radii to actually work more.

(a rough change, but good enough for now)
add cmdline arg to exit after a given number of frames

(for debugging, chiefly performance-testing)
fix zbox_tester
rename *_tester to *_visualizer for clarity/accuracy

Their purpose was (is?) to test things,
but they are not unit tests,
and they're also cool to look at.
move data structures to data_structures/

These are things that don't include world.hpp and are instead
generic somehow.

I'm putting them in a directory because I'm planning to add
more data-structure files and it will be easier to keep track
of them this way.
Rearrange utils.hpp to make deps a bit more obvious
Move basic config defs (& caller_error) to new config.hpp

This resolves a dependency cycle between
bounds_checked_int.hpp and utils.hpp
refactor
move system includes above local includes where possible

(in concurrency_utils.hpp, it's not quite possible,
but there's not too much stuff in config.hpp now)
Acknowledge bbox_collision_detector max_size.
Add a more generic borrowed_bitset, with tests
bbox_collision_detector: Use borrowed_bitset.hpp rather than local impl.

This as a side-effect increases exception-safety
  (cleanup via destructor)
and increases performance by a smidge.
CMakeLists: use cmake sequences not strings for flag computation

- why not use something more semantic to the language,
to as far as it lets us.

It was also necessary for (not planning to commit the
following) the purpose of calling GCC manually use
pre-compiled headers, which I gave up on because
(the way I tried it at least) it didn't always decrease
compilation time (sometimes increased!) and never
decreased it by much, and caused a few other
complications with compiler warnings and with
recompilation-checking.