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.