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.

I don't particularly like the idea of having the `rings_containing_impl` class.
I believe you can implement what you want with just the `ring_containing` class you have here.
Just write the general algorithm here and specialize it for multi-polygons.

Given this remark, my other comment about the conditional expression should be re-written as:
```
rings_containing
    <
        FirstGeometry,
        typename boost::range_value<SecondGeometry>::type
    >::apply(geometry1, *it)
```