ENH: make "closed" part of IntervalDtype
- [x] closes #19371
- [x] tests added / passed
- [x] passes `black pandas`
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [x] whatsnew entry

Most of the work here is in accomodating backwards-compat.
added whatsnew for deprecation cc @jschendel if you can have a look. > Performing static analysis using mypy
pandas/core/dtypes/dtypes.py:1250: error: Item "ExtensionDtype" of "Union[Any, ExtensionDtype]" has no attribute "closed"  [union-attr]
pandas/core/dtypes/dtypes.py:1251: error: Item "ExtensionDtype" of "Union[Any, ExtensionDtype]" has no attribute "closed"  [union-attr] There's an annoying new failure mode:

```
dtype = pd.IntervalDtype("interval[int64]")   # <-- now warns and sets closed="right" as default

idx = pd.IntervalIndex([], dtype=dtype, closed="left")   # <-- raises ValueError bc of mismatch
``` lgtm. @jorisvandenbossche @jschendel if you can take a look. Why is it needed to deprecate the default value for `closed`? > Why is it needed to deprecate the default value for closed?

ATM there is (presumably) code in the wild calling the IntervalDtype constructor without specifying any `closed`.  Eventually failure to specify closed will raise.  Needs a deprecation cycle. Yes, but so the question is: why does it need to eventually raise? 
Other constructors like `Interval` and `interval_range` also have a default. 

Another option could also be to have it "not initialized" as default, to enable inferring it from the passed Interval objects > Another option could also be to have it "not initialized" as default, to enable inferring it from the passed Interval objects

id be OK with this > > Another option could also be to have it "not initialized" as default, to enable inferring it from the passed Interval objects
> 
> id be OK with this

then the default should be 'infer' (which we can do if we have an unitialized value) ok ill give this a shot and update ping when ready here this was ok, can you merge master Most recent discussion is that I need to do a partial re-write, which I haven't gotten around to yet. > Most recent discussion is that I need to do a partial re-write, which I haven't gotten around to yet.

ok! updated as discussed.  agreed this is much nicer I must be missing it, where exactly is the FutureWarning in the Dtype constructor triggered? this no longer deprecates? > this no longer deprecates?

correct.  passing "closed" to IntervalDtype is optional now > say that the repr for Interval is changing.

let's save that for the follow-up that changes that is aimed specifically at the repr