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
I would prefer to see `case All(_) => ...` instead of `case _: All[_] => ...`

In my opinion the `x: Z => ...` is great when you need a value (`x`) that is typed as `Z`. Since our types are all case classes, I feel like the other syntax reads a bit better.