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 previous error message for fftn that would raise TypeError if s were a tuple.
TST: Add tests for invalid fft sizes
Merge pull request #2968 from endolith/fft_zero

ENH: Improve cryptic error messages for invalid FFT sizes