Enable filtering (filt) across columns of arrays

When passed a multidimensional array, simply iterate over its columns, independently filtering each one.  The starting filter state may be given as a vector (in which case it is common across all columns) or an array with the same number of columns as the input.
Relax filt signatures to allow heterogeneous types

Previously, filt[!] methods were only defined for arguments of all the same type T<:Number. This relaxes that restriction, allowing one to, for example, filter an array of Float32s by Float64 coefficients.

By default, the output of filt will be the determined by promote_type of all arguments.

Instead of defining many type parameters (T<:Number, S<:Number, ...), filt now simply trusts that the eltype of the arrays have methods for basic arithmetic.
API change to fix the type instability

Because we're back to only one optional element for both `filt` and `filt!` (the initial state), I figure it's simpler to just use a positional argument in both cases.  So now the API is:

    filt(b, a, x, [si])
    filt!(out, b, a, x, [si])
Merge pull request #7560 from mbauman/filtarray

Filtering (filt) across columns of arrays and method signature tweaks