I was on the fence too.

We could remove isEmpty, and put
```scala
require(lower.intersects(upper), "Intersections must be non-empty")
```
in the constructor for Intersection. I think this is legitimate. If you are not sure, you can use .leftOpenRightClosed or use Lower(l) && Upper(r) which, as Joe mentions, does the right thing (which it can do because of the Interval[T] return type).

So say we all?