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.

Let me be more precise about this.
My suggestion is to write an inner class as follows:
```
struct unary_rings_containing_predicate
{
    unary_rings_containing_predicate(FirstGeometry const& geometry1)
        : m_geometry1(geometry1)
    {}

    template <typename Geometry2>
    static inline bool apply(Geometry2 const& geometry2)
    {
        return rings_containing<Geometry1, Geometry2>::apply(m_geometry1, geometry2);
    }

    Geometry1 const& m_geometry1;
};
```
Then instead of the for-loop you can write:
```
return check_iterator_range
    <
        unary_rings_containing_predicate
    >::apply(boost::begin(geometry2),
             boost::end(geometry2),
             unary_rings_containing_predicate(geometry1));
```