add rain.py: work in progress
rain.py: add GaussianGenerator (WIP)

The GaussianGenerator class is a Generator based on random
noise particles with a density of probability that varies
to create a gaussian function around some frequencies.
rain.py: add SplineGaussianGenerator + envelope

The SplineGaussianGenerator is a work in progress to create
notes based on a frequency spline.  A series of random
particle start and end times as well as `k' factor are then
provided to the generator to actually produce the sound data.

The number of random particles at any given point in time
is controlled by an amplitude envelope using the interpol
module and interpol.spline_equ.
rain.py: update with new interpol and modules layout
rain.py: tidy-up and fix minor problems

* use float for density calculation
* remove duration messages
* rename GaussianGenerator.curve -> .focus
add slice.py to slice a big file based on silence
splat.gen: add basic particle generator classes

* add gen.Particle to contain the start, end and frequency of a particle
* add gen.ParticlePool to manage a list of Particle objects
* add gen.ParticleGenerator to generate particle sounds using a
  sub-generator and a ParticlePool (work in progress)
gen.ParticleGenerator: use equalization
gen.ParticleGenerator: use stereo gain fuzz
gen.ParticleGenerator: add common gain fuzz

The ParticleGenerator.set_gain_fuzz method now takes 2
arguments for the common and stereo gain fuzz values.
The common value is applied to all channels, while the
stereo value is applied differently to each channel.
gen.ParticleGenerator: add curve method to use q parameter

The `ParticleGenerator.curve' method is called to alter the
particle frequency in order to use a non-uniform random
distribution.  The current curve uses the `q' parameter
as a spline to make the frequencies gather around a central
one with more or less depth.
gen.ParticleGenerator: tidy-up names and properties
add splat_004.py: more experiments with particles
gen.ParticlePool: add `share' argument

Add `share' argument to only use a share of the particles
in the ParticlePool.  This is also used in ParticleGenerator.run
method and passed on to ParticlePool.iterate.
add splat_005.py: random sine, triangle and square waves
add splat_006.py - crazy frequency modulation
splat_005.py: tweak levels + use random key each time
splat/scales.py: move __getitem__ for readability
add signal_bm.py as a signal benchmark
gen.ParticleGenerator.run: fix signature