Dependencies for contracts and expressions

Two functions compute the dependencies:
eDependsOn :: Expr a -> Dependencies
cDependsOn :: Contract -> Dependencies

Dependencies are represented as a sorted list of
(observable, start, end) entries (Dependency) with no
overlap between start-end sections. The dependency ranges
from offset start to offset (end-1), which makes merging
dependencies easier.
quickcheck hash functions