Fix more bugs related to diff and shift operations

This is an improved version of the fix in 1331bd3bb8c85c1857d45a07c515244914bea1e1.
The problem was more fundamental - the index operation was returning invalid indices
which was causing the issue with Series.diff, but also other similar issues in
Frame.shift, Frame.diff and Series.shift. I aslo added a couple of tests for this.