Make Cube.data deal in views.

This applies the same sort of shape protection to Cube.data as is currently enjoyed by Coord.points. 

Without this PR it is possible to change the shape of a Cube without the Cube realising:
```
>>> data = np.zeros((3, 4))
>>> cube = iris.cube.Cube(data)
>>> cube.shape
(3, 4)
>>> data.shape = (2, 6)
>>> cube.shape
(2, 6)
```