Improved copy methods

The new copy methods have a uniform API (which also matches pandas): they take
a keyword argument `deep`.

`deep=False` no longer always loads data into a numpy array. This makes it
possible to write functions to using the public API to rename variable
dimensions without always loading variables into memory.