Draft of the rough legalizer

This legalizer gives a roughly legalized position for use by the analytical placer. This is done with pulling forces toward the legalized positions.

The legalizer maps the circuit to bins and attempts to group bins until there is no overfill, then it distributes the cells evenly. Currently, it works by growing a box closest to the center of gravity of the current placement and by using geometrical partitioning. Later, it could use a per-gridcell approach and some basic min-cut approaches.

This draft introduces some useful classes, such as iterators on boxes and on a point's neighbours and the code using them. My intend is to use them for maze routing as well.