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.
Since you're tweaking this section, have you considered switching to an allocate-and-assign pattern? For example:
```python
points = np.empty(self.points.shape[0] + 2)
points[1:-1] = self.points
points[0] = self.points[-1] - self.units.modulus * direction
points[-1] = self.points[0] + self.units.modulus * direction
diffs = np.diff(points)
```