WIP: `overlaps` handling of empty intervals in Interval and IntervalArray
This supercedes #26894, which made `Interval()` raise an exception on attempts to create of the form `[x,x)` or `(x,x]`. 

- [X] closes #26893
- [x] tests added / passed
- [X] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [X] whatsnew entry

Discussion in #26893 suggests we may want to treat empty intervals as Singletons in the future. But for now, just fix overlaps.
 
*update*: `IntervalArray` has its own vectorized implementation of `overlaps`, fixed and now shares the new test cases I added for `Interval.overlaps`.