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.