Implementing the `has-limits` trait

The has-limits trait is formally defined by YEP-303.

The has-limits trait defines the ContinuousHardware class. The class implements all that is needed to be compliant with the trait, and introduces an state hw_limits. hw_limits is a 2-tuple which can represent programatically defined limits (e.g. firmware limits from the device itself, which may change at runtime). Handling of taking the intersection with user defined configuration limits is handled by the ContinuousHardware class. While implementing has-position is required as well, here is an example demonstrating new behavior:

self._state["hw_limits"] = (0., 50.)

built 2020-09-26 00:52:26                                      CC0: no copyright