Change sampler.play() to be blocking by default

The intuitive behavior of play() is blocking (i.e. start playing,
don't continue on in code until the playback ends or is interrupted),
so make play() blocking by default.

A non-blocking play() really only makes sense in specific programmatic
use cases where there's some other kind of input or output happening
during playback.

In most audio generation use cases, continuing on, hitting the end of
the program, and terminating the audio playback immediately is not
desirable.
Add support for playback of multiple channels

Use the same generator -> one channel, sequence of generators ->
multiple channels logic in the PyAudio sampler.play() function as
used in the write_wave() function.

This allows live playback of muliple channels.
Support multiple synchronized channels

Add a `channelize()` util function to permit synchronized multiple
channel generators.

The sampler functions all assume that if they receive a generator, it's
a single channel audio generator, and if they receive a sequence, it's a
sequence of single channel generators representing one or more channels
of audio data.

The problem is that this makes it very difficult to synchronize content
across multiple channels, since it's not possible to make a single
generator that can output samples for all channels at a particular point
in time at once.

This channelize() function lightly wraps itertools' tee() function to
make this sort of synchronized generator usable: It replicates the
multi-channel generator, one copy per output channel, then filters each
of the new generator copies so that each outputs only a single channel's
sample at each iteration.
Add a decible-based volume util function
Remove relative imports in noise.py
Add variable freq, custom output range to tone()

Modify the tone() generator to accept either a fixed frequency, as
before, or a generator producing frequencies. This permits time-varying
frequncy output.

Note that the signal's phase will be continuous across varying
frequencies.

Add min_ and max_ arguments to tone() to permit output ranges other than
[-1, 1]. This is entirely equivalent to

    util.normalize(tone(frequency), -1, 1, min_, max_)

and is added solely to make tone() more convenient to use as a "pulse"
function, e.g. as an input to tone()'s own new frequency generator
argument to create a pulsed frequency:

    tone(tone(5, 440, 880))
Add some basic DSP filters

Add low-pass, high-pass, band-pass, and band-stop recursive IIR
filters based on examples from *The Scientist and Engineer's Guide
to Digital Signal Processing*.

See also http://www.dspguide.com/ch19.htm
WIP audio input support!
Fix string typo.
Fix output sampler generator

- Fix: Set minimum value for 8 bit unsigned format to 0, not -128
- Refactor sampler generator for clarity
Remove relative imports
Add unpacking of Wave samples for all widths

Add support for unpacking 2 and 4 byte Wave samples.
Move grouper and RingBuffer to utils

Add new utils:

- grouper generator from itertools docs – chunks generators into n
  item long segments, e.g. for buffering output
- RingBufer – lightweight wrapper around collections.deque with a
  maxlen; rather than discarding overflow values from the front
  of the queue, return them as they're evicted.
WIP audio input