ENH: Improve cryptic error messages for invalid FFT sizes

fft([]) used to produce `error: (n>0&&n<=size(x)) failed for 1st keyword n: zrfft:n=0`.

Now it says `ValueError: Invalid number of FFT data points (0) specified.`

BUG: Also fix my own mistake in error message for fftn that would raise `TypeError: not all arguments converted during string formatting` if s were a tuple.