Changes to the behaviour of the algorithm mean that this release breaks compatibility with v1.0.0.
- Changes behaviour so that `lower_bound == upper_bound` behaves as expected rather than being an error
- Replaces `constraints` with `bounds` (shorter variable names as before these were getting out of hand)
- Updates internal variable names to be more consistent and less influenced by the real-time systems use case
- Improvements to documentation