Add ability to play raw samples

Add raw_samples flag passthrough to play() function so it's
possible to bypass Wave sample generation during soundcard
playback.
Ignore and cleanup dist/
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))