Reapply reverted commits

4700f7f653cbb09896bdad6009e175a61808057c:
Convert tests to CypherFunSuite

4501bd22519c07e674e4a8edc5c59daa19f9cc3e:
Rename mergeUp & mergeDown to supremum & infimum
AKA leastUpperBound and greatestLowerBound

c8ce10c2063b3c52d7eab56b0d4598ffe1c13eee:
Make TypeRange and TypeSpec clearer
Adds documentation and cleans up some tests