Diff on sparse dtype
Correct behaviour without Sparse[int]:

```python
a = [[0, 1], [1, 0]]
print(pd.DataFrame(a).diff())
```
yields:
```
     0    1
0  NaN  NaN
1  1.0 -1.0
```

Current behaviour (doesn't work):
```python
a = [[0, 1], [1, 0]]
print(pd.DataFrame(a, dtype='Sparse[int]').diff())
```
yields:

```
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-34-3cc99aac7c69> in <module>
      3 print(pd.DataFrame(a).diff())
      4 
----> 5 print(pd.DataFrame(a, dtype='Sparse[int]').diff())

~/.local/lib/python3.6/site-packages/pandas/core/frame.py in diff(self, periods, axis)
   6592         """
   6593         bm_axis = self._get_block_manager_axis(axis)
-> 6594         new_data = self._data.diff(n=periods, axis=bm_axis)
   6595         return self._constructor(new_data)
   6596 

~/.local/lib/python3.6/site-packages/pandas/core/internals/managers.py in diff(self, **kwargs)
    564 
    565     def diff(self, **kwargs):
--> 566         return self.apply("diff", **kwargs)
    567 
    568     def interpolate(self, **kwargs):

~/.local/lib/python3.6/site-packages/pandas/core/internals/managers.py in apply(self, f, axes, filter, do_integrity_check, consolidate, **kwargs)
    436                     kwargs[k] = obj.reindex(b_items, axis=axis, copy=align_copy)
    437 
--> 438             applied = getattr(b, f)(**kwargs)
    439             result_blocks = _extend_blocks(applied, result_blocks)
    440 

~/.local/lib/python3.6/site-packages/pandas/core/internals/blocks.py in diff(self, n, axis)
   1328     def diff(self, n, axis=1):
   1329         """ return block for the diff of the values """
-> 1330         new_values = algos.diff(self.values, n, axis=axis)
   1331         return [self.make_block(values=new_values)]
   1332 

~/.local/lib/python3.6/site-packages/pandas/core/algorithms.py in diff(arr, n, axis)
   1943 
   1944     na_indexer = [slice(None)] * arr.ndim
-> 1945     na_indexer[axis] = slice(None, n) if n >= 0 else slice(n, None)
   1946     out_arr[tuple(na_indexer)] = na
   1947 

IndexError: list assignment index out of range```