_splat.c + doc/splat.rst: add docstrings + set_duration

* add Fragment_set_duration to allow resizing the fragment to a
  given duration in seconds via the Fragment.duration attribute
* add docstrings to Fragment attributes
* add prototypes to private functions + tidy-up
* doc/splat.rst: add Fragment.duration, channels and sample_rate
test.py: add `check_samples' function and use it

Add `check_samples' function to check whether a given set
of samples match the values in a fragment (within a small
error margin to cope with precision variation between
different hardware platforms and software implementations).
splat/data.py: fix start and end in Fragment.save

The `start' and `end' values in Fragment.save are floating point
values with times in seconds.  They are now converted to integers
with sample indexes which can be used for slicing the raw data.
splat/filters.py: add `reverb_delays' function

This function creates a list of delays for the reverb
filter given a few parameters.
dew_drop.py: use splat.filters.reverb_delays()
_splat.c: set default level in Fragment.normalize

The default level in _splat.Fragment.normalize is now set
to -0.05 as that's about the level of 8-bit noise.
dew_drop.py: use default level in Fragment.normalize
add splat.interpol to perform interpolation

* add splat.interpol.Polynomial to define a polynomial
  and calculate a value and its derivative polynomial
* add splat.interpol.PolyMatrix to create a polynomial
  that will coincide with a given series of points via
  a matrix reduction
* add splat.Spline to create an interpolation using
  a series of polynomials of a given degree `n' that will
  coincide with a given list of points with optional
  slope (derivate) values - which will create `n+1' order
  polynomials in the spline
splat.interpol: add Spline.slices()

Add Spline.slices() method to return a list of x coordinates that
form slices at for a given y value.  This can be used to build
random distributions by sweeping across the whole y range.

Also add Spline.start and Spline.end to get the first and last x
values.  Now the input points are always sorted in increasing x
order.
update module names and imports from splat/__init__.py

* remove all `import' statements from splat/__init__.py
* add __all__ list in splat/__init__.py for import *
* rename splat.generator -> splat.gen
test.py: update import statements
dew_drop.py: update import statements
doc/splat.rst: update module and class names
update :py: references in docstrings with new module names
doc/splat.rst: add section about interpolation
splat/interpol.py: add docstrings + tidy-up
splat/interpol.py: add docstrings + tidy up

* add docstrings to all classes and public methods and attributes
* Polynomial:
  * always convert `pts' sequence into a tuple
  * add `__repr__' method and return that of the coordinates tuple
* PolyMatrix:
  * only calculate the polynomial when necessary in the `poly'
    attribute (and not as a side effect of PolyMatrix._build)
  * reset the internal reduced matrix and polynomial when adding
    a row to the matrix via `add_row'
  * remove `add_point' as it is of little use and conflicts with
    `add_row' (may be solved with more code...)
review and improve documentation and docstrings
test.py: add test_spline + floatcmp

* add test_spline case for the splat.interpol.Spline class
* add floatcmp function to check that 2 floats are close
  enough to each other (room for improvement)
build-0004