Implement flexible Timespans

Implement support for flexible 'Timespans', and formalise laws for them
(FlexiLaws).

The FlexiTimespans laws are enforced with mutually recursive functions.
To avoid an endless cycle, laws are formalised to avoid parent cycles
(ParentLaws).

The laws are tested with QuickCheck. This adds a new test-suite, 'prop',
that depends on QuickCheck, quickcheck-instances, test-framework, &
test-framework-quickcheck2.

Signed-off-by: Alexander Berntsen <alexander@plaimi.net>
Signed-off-by: Stian Ellingsen <stian@plaimi.net>
Reviewed-by: Stian Ellingsen <stian@plaimi.net>