BUG: `Series.shift` fails with non-writable array
### Problem

```python
import numpy as np
import pandas as pd

arr = np.empty(shape=(0,))
arr.setflags(write=0)
pd.Series(arr).shift(1)
```
will raise an Exception:

`ValueError: assignment destination is read-only`.

Update: all pandas versions from 0.16 to current master have this bug.

### Solution

Here `maybe_upcast` will return exactly the same array, the write permission keeps the same (non-writable):
https://github.com/pandas-dev/pandas/blob/186ce4e772c8884b5bc87ab767adc94d6870a4e0/pandas/core/internals.py#L1285

Here since it's an empty array, `np.roll` will not be executed so `new_values` keeps non-writable. That's where the exception is:
https://github.com/pandas-dev/pandas/blob/186ce4e772c8884b5bc87ab767adc94d6870a4e0/pandas/core/internals.py#L1293

Maybe add an `else` condition can fix this:
```
if np.prod(new_values.shape):
    new_values = np.roll(new_values, _ensure_platform_int(periods),
                         axis=axis)
else:
    new_values = self.values.copy()
```