Split the Ranged interval case class into Bounded, Point and Empty.

Hi all,

following #263, I'm starting the refactoring of the Ranged <: Interval class, using the hierarchy below. The idea is to convert all Ranged() instantiations and extractors to be more fine-grained.

As Interval[A] requires only A: Order, we do not have an arbitrary value at disposal, this is why Empty carries a "someA" value.

Cheers,

Denis
Since the first four cases are the only ones using `emptyIsMin` maybe it makes sense to remove it from the pattern match, and instead say:

```scala
(lhs, rhs) match {
  case (EmptyBound(), _) => if (emptyIsMin) lhs else rhs
  case (_, EmptyBound()) => if (emptyIsMin) rhs else lhs
  case ...
}
```

What do you think?