config: a few small improvements to config parsing
buffer: rewritten buffer code

    - buffer.DataBuffer - default entry point for old buffered data
    - buffer.DataIterator - default entry point for streaming new data
    - source/* - add sources for data, implemented nds.py
TimeSeriesMonitor: updated duration and data properties
TimeSeriesMonitor: fixed dynamic y-axis scaling
DataMonitor: fixed a bug in kwargs parsing
TimeSeriesMonitor: fixed duration xlim problem
BufferCore: minor improvements in get()

    - still need to decide whether to support discontiguous segments in
      buffer
NDSDataIterator: multiple small changes
DataMonitor: add backfill method with pad kwarg
DataMonitor: added labelling
SpectrumMonitor: fix for new buffer type

    - added filtering
TimeSeriesMonitor: minor change in update_data
DataMonitor: minor change

    - should have no effect under normal circumstances
BufferCore: minor bug fix
BufferCode: append data in place by default
NDSDataIterator: two minor changes
SpectrumMonitor.update_data: always generate spectrum

    - if elapsed time is less than fftlength, shorten fftlength to
      calculate something
    - always use the end of the data buffer (most recent data) rather
      than the TimeSeries.asd default of the using the start
config: fix GWpy IO formats
gwdv: add option to disable latex
SpectrumMonitor.parse_combination: fixed bug in units