Split the Ranged interval case class into Bounded, Point and Empty.
Added convenience apply and extractor to Ranged while the rest of the code is adapted.
Replaced expensive "equals" method.
Changed confusing notation: openAbove -> openUpper, openBelow -> openLower.
no message
Refactored Interval.isEmpty, Interval.isPoint.
Refactored isBelow(At), isAbove(At) and corrected a bug for empty intervals.
Refactored toString.
Refactored a few simple methods.
Added test cases.
Working changes.
Merge commit '356ce2cae66dd052aa85fedfe2eca5c8e149e909' into topic/interval-point
isSupersetOf can fail on empty intervals.
- renamed isBelow, isAbove to hasBelow, hasAbove, reflecting their (clarified) semantics
- renamed is(Closed/Open)(Below/Above) to is(Closed/Open)(Lower/Upper) --- because Below has an upper bound, and Above has a lower bound, the terminology is counter-intuitive
- added sys.error when calling lowerPair/upperPair on empty intervals, because it is leading right now to subtle, difficult to detect bugs
- removed upperPairAsLower, which actually extracts the lower bound of Above(lower) --- and is not used anywhere
- refactored isSupersetOf
Finished refactoring of isSuperset.
Merge branch 'master' into topic/interval-point
Continued refactoring of Interval, using an extended Bound[A] hierarchy.
Removed value embedded in Empty class, removed dependencies on AdditiveMonoid that were there just to give a dummy value.
Removed last uses of Ranged and removed its instances.
Small fixes.
Replaced all methods that constructed (A, Int) pairs or Option[(A, Int)] to represent bounds to methods using Bound[A].

Moved Bound[A] to a new subpackage spire.math.interval instead of using the Interval companion object namespace.

Refactored Interval[A] * Interval[A].

Added method to construct Interval from a set of 2-4 bounds.
Added missing import in tests.
Corrected (again) import.
Merge commit '8183bccdccdf0abb6f4d9c48ef758a0ee5f8a326' into topic/interval-point