MAINT: Refactor of regrid

Added clarity by the inclusion of a new unittest and also a refactor of
the code which clarifies code path.

This is the beginning of a possible enhancement to come for generalising regrid to handle points and grids (hence pulling _broadcast_index out into a class method in particular).  I have taken away the support for handling points in this PR that I was initially proposing as there would be too much in one PR here (this may come in a later PR).

**Deprecation:** regrid
**NewAPI:** Regrid class

New API proposed by this PR:

```Python
    regridder = Regrid(array, source_x_coords, source_y_coords, source_cs)
    regridded = regridder(target_proj, target_x_points, target_y_points,
                           mask_extrapolated=mask_extrapolated)
```

- [ ]  Remove internal calls to existing regrid (switch to calling Regrid class).  Happy to address this upon receiving confirmation that the approach taken in the refactor is acceptable.