Preserve metadata when converting between DataFrame and numpy array

For example, when __matrix__ is used, or .values, or when DataFrame is made by wrapping a numpy ndarray.