BUG: Handling of guess_bounds for circular coords

Currently, cube.intersection is broken for some cases where we have derived the bounds via `Coord.guess_bounds` because the bounds calculated are not correct at the edges and so produce an incorrect range.

This results in the following error when using `Cube.intersection`, raised within `Cube._intersect_modulus`:

```Python
ValueError: coordinate's range greater than coordinate's unit's modulus
```

This PR corrects the handling of circular coordinates in `Coord.guess_bounds`.  Also fixing the case where the above exception is raised for guessed bounds.
> It does not actually add test coverage to nearest neighbour interpolation

Perhaps that's because it's not actually testing interpolation - it's a test for `Coord.nearest_neighbour_index()`. :wink:

Would you be up for moving the equivalent tests to the unit test area? E.g.
```python
class Test_nearest_neighbour_index(...):
    def test_circular_descending(self):
        coord = DimCoord([270, 180, 90, 0], bounds=[[315, 225], ...], ..., circular=True)
        result = coord.nearest_neighbour_index(...)
```