This finalizes the efforts on the prototype for the timeseries complex coverage

- Implements a stable qsort for value dicts
- New method for complex coverages: get_complex_type
- Inserting a value dictionary into a timeseries complex coverage appends the
  value set to a disjoint coverage with the least union area, if there are no
  disjoint coverages then a new one is created
- Adds test for simple-case random insert and retrieve
- Adds to_tuple() for interval class