Currently the first and last labels are not included, because of the 1e-9 fudge factor used in this routine, and numerical precision issues in the data transform. But if we add a pass-through in this method for `self.crs == self.axes.projection` then it'd be possible to get the first and last labels to appear using something like:
```
ax.set_xlim((137, 143))
gl = ax.gridlines(draw_labels=True)
gl.xlocator = mticker.FixedLocator(range(137, 144))
```

Either way - it'd be nice to have a test that shows this.

NB. With a smarter version of `ax.set_extent` it might be possible to use it instead of `ax.set_xlim` but I think that should be kept out of this PR.