BUG: ensure integer shape, strides for as_strided [backport 1.4.x]

Running mlab.psd with non integer `noverlap` might lead to corrupt memory access in the underlying `np.lib.stride_tricks.as_strides`. This is not obvious to debug, especially when `noverlap` is calculated programmatic.

Example:
```python
from __future__ import division
import numpy as np
import matplotlib.pyplot as plt

N = 1000
n_sin_periods = 10

x = np.empty(3*N, dtype='f4')
x.fill(np.NaN)
y = x[N:2*N]
y[:] = np.sin(np.arange(N)/N * 2 * np.pi * n_sin_periods)

plt.psd(y, NFFT=330, noverlap=0.6)
plt.show()
```

This was not problematic with matplotlib 0.13, as the mlab.psd implementation was not using  `np.lib.stride_tricks.as_strides`  at that time.