ENH: Add 'lp' and 'hp' to band_dict
(since 'bp' is there and functions like 'lp2hp' imply it)
BUG: Use zpk in iirfilter to improve accuracy of higher-order filters

Previously iirfilter converted to tf representation internally, which is not numerically stable for high filter orders or cutoff frequencies close to 0.  Now it uses zpk format internally to improve accuracy.  Currently this uses private functions like _zpklp2lp, but they should eventually be merged into the existing lp2lp etc functions or made into their own functions, when a decision is made on the best way to do that.
BUG: Make all filter design functions return empty arrays for N=0
ENH: Clearer error message for incorrect Wn size
Previously it said "IndexError: 0-d arrays can't be indexed"
Combine bandpass and bandstop calculations for DRY
Also add quotes to error messages
ENH: Add check for negative or fractional filter orders (besselap already does it)

Indent imports

Use string for error or else besselap says "not supported for order 3" when it means "not supported for order 3.5"
MAINT: Fix error message for zero, is not positive
DOC: More detailed dosctrings for _zpkbilinear, _zpklp2lp, etc.
DOC: Fix "bandstop" in 2 lp2bs functions
DOC: Add note about DC gain for equiripple passband filters
BUG: 0-order cheby1 and ellip should have gain of -rp, like other even-order filters
Partial revert of b2aa105
TST: Add tests for IIR filter functions
TST: Use almost_equal for float equality testing
MAINT: Use simpler formula for 0-order gains
MAINT: More descriptive variable names which don't modify input parameters, check for improper transfer function in all transforms, calculate fs*2 only once
MAINT: remove trailing whitespace, reorder commands to z, p, k
DOC: Add an example plot to iirfilter docstring,
add notes about frequency transformations
DOC: Make plot in signal.iirfilter docstring appear,
add note about highpass symmetry, change comment wording
BUG: buttap() should produce a purely real pole

Previously buttap for odd orders produced a pole like -1+6.1e-17j rather than -1+0j exactly.  This made poly(p) complex, though all the imaginary parts were negligible.  This then made the ba representation complex, though it is a purely real filter.

Now the calculation is symmetrical, so the middle term works out to -exp(0j), which is exactly -1+0j.
BUG: Change cheb1ap() to produce a purely real pole

Change theta of calculation to make it symmetrical about 0, so that the lone pole for odd-ordered filters is an exact real number, and the pole pairs are exact conjugates, so that ba representation (from numpy.poly) is purely real.

Also some simplifications:
arcsinh(1 / eps) is equivalent to log((1 + sqrt(1 + eps * eps)) / eps)
-sinh(mu + 1j*theta) is equivalent to -sinh(mu) * cos(theta) + 1j * cosh(mu) * -sin(theta)
which is the rotated version of the original
-sinh(mu) * sin(theta) + 1j * cosh(mu) * cos(theta)
BUG: Change cheb2ap() to produce a purely real pole

Change theta of calculation to make it symmetrical about 0, so that the lone pole for odd-ordered filters is an exact real number, and the pole pairs are exact conjugates, so that ba representation (from numpy.poly) is purely real.