ENG/BUG: Changed NDFrame.shift to work with arbitrary axis/ndims.

Related to #4867. First part of changing `Panel.shift` is to make `NDFrame.shift` work with any axis and number of dimensions. 

Until Panel uses it, the only case of this is `DataFrame.shift(axis='columns')` which is added as a test.