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.

Here you could re-write the conditional expression as:
```
rings_containing_impl
    <
        FirstGeometry,
        typename boost::range_value<SecondGeometry>::type
    >::apply(geometry1, *it)
```
I am assuming in the code above that you have also added the default value for the third template argument as suggested in another comment.
The advantage of this approach, is that you no longer need the forward declaration for `detail::disjoint::rings_containing`.