Clean up filt()

Fixes the special case for FIR filters, which AFAICT was previously
unreachable. However, it will often be faster to perform FIR filtering
by FFT, and in the future we might want to do that.

Requires that coefficients are numbers or AbstractVectors and that x is
an AbstractVector, since I think the previous behavior would have
produced unexpected results for anything else. I've punted on promoting
types for now, since I'm not sure what best practice is, although I'm
happy to learn.

Also adds tests.
Merge pull request #3183 from simonster/filt

Clean up filt()