Added
- An `AbstractDiscreteInterval` class to ease the creation of specialized discrete intervals (experimental).
- A `create_api` function to generate an API similar to the one of `portion` but configured to use a given subclass of `Interval` (experimental, see [Specialize & customize intervals](https://github.com/AlexandreDecan/portion#specialize--customize-intervals)).
Changed
- Speed up `repr` and `to_string` for `Interval` instances (see [76](https://github.com/AlexandreDecan/portion/issues/76), adm271828).
- Some internal changes to ease subclassing:
* `from_string` and `from_data` accepts a `klass` parameter to specify which class should be used to create `Interval` instances (default is `Interval`).
* Add a `klass` parameter for `open`, `closed`, `openclosed`, `closedopen`, `singleton` and `empty` (default is `Interval`).
* Add a `_klass` class attribute in `IntervalDict` to specify how to create `Interval` instances (default is `Interval`).
* `IntervalDict` uses `self.__class__` to preserve subclasses when creating new instances.