Fix disjoint test for polygons with a hole

This is a follow-on from #159, but against the `develop` branch and with some extra fixes which were brought to light by the extra tests which are in the `develop` branch, namely:

* Multipolygons: Tests were failing when the second part of a multipolygon intersected, as `point_on_border` returns only a single point. The check now tests all parts of a multipolygon.
* Touching points: Previously, it was checking if a point on one geometry was within the other, but this was not sufficient if the outer rings touched. The within check would fail, as the point may be on the boundary rather than strictly within. The code now uses `covered_by` and passes the tests.

If I understand correctly, we avoid forward declarations in Boost.Geometry.