_splat.c: tidy-up channel iterators

Use `unsigned' index when iterating over the channels
of a fragment, and make variables names more consistent.
_splat.c: rename do_resize to frag_resize + tidy-up

Rename `do_resize' to `frag_resize' as it's a function to
operate on Fragment objects.  Also the return value can be
tested as a boolean.
_splat.c: add levels_helper

Add frag_get_levels and use it in Fragment and all sources.
This takes care of parsing either a single level for all
channels, or one for each channel if the numbers match,
and converts the levels to lineary floating point values
if they are all float objects.
_splat.c: add signal vector implementation

Add a signal vector implementation to unify signal data,
which can be coming from a float, callable or Fragment.
It acts as a window of currently 256 samples which can
be iterated over between two points in time.
_splat.c: add source helpers + tidy-up

Add `splat_check_all_floats' to test whether a series of
Python objects are floats using a variadic function.  This
can be used to optimise the code when only floats are used,
to avoid going through the signal vectors.

Also add some comments to separate different sections in
the file.
splat.gen: unify arguments for sources

The new signature for Generator.run is now:
  (start, end, *args, **kw)

The `levels' are dynamically read from the kw arguments,
and passed to _run with this signature:
  (frag, levels, *args, **kw)

For the SourceGenerator, the signature of ._run is:
  (frag, levels, freq, phase, *args, **kw)

This means SourceGenerator.run can be called like this:
  (start, end, freq, phase, levels=LEVELS)

Some sources have an extra `ratio' argument, and levels are
optional so this is anoher example:
  (start, end, freq, phase, ratio)
_splat.c: update source arguments
test.py: update Generator.run arguments
_splat.c: implement signals for sine source

Implement signals for the `sine' source:
* splat_sine_floats is optimised for constant float values
* splat_sine_sinals works with signal vectors for all values
* splat_sine is the entry point
_splat.c: implement signals for square source

Implement signals for the `square' source:
* splat_square_floats is optimised for constant float values
* splat_square_signals uses signal vectors for all values
* splat_square is the entry point
_splat.c: implement signals for triangle source

Implement signals for the `triangle' source:
* splat_triangle_floats is optimised for constant float values
* splat_triangle_signals uses signal vectors for all values
* splat_triangle is the entry point
_splat.c: implement signals for overtones source

Implement signals for the `overtones' source:
* splat_overtones_floats is optimised for constant float values
* splat_ovetones_mixed is optimised for constant float values
  only for the overtones (ratio, phase, levels) and uses signals
  for the fundamental frequency, phase and levels
* splat_overtones_signals uses signal vectors for all values
* splat_overtones is the entry point

Also change the format of the overtones description, using a
list of 3-tuples (ratio, phase, levels) for each overtone
instead of a dictionary using ratio keys.
splat.gen.OvertonesGenerator.ot_decexp: generate list

The `overtones' source now expects a list of tuples instead
of a dictionary to describe all the overtones.  This is reflected
here in ot_decexp, and also in the default overtones list.
dew_drop.py: update with new Generator.run signature