BUG: Fix IntervalIndex constructor and copy with non-default closed
State: closed

- [X] closes #18334 
- [X] closes #18339 
- [X] tests added / passed
- [X] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [X] whatsnew entry

Lumped the two issues together since they're dealing with the same thing, and the fixes are identical/small.  Rewrote relevant tests to be parametrized over ``closed``.

I also went through unrelated `IntervalIndex` tests and where it was straighforward parametrized over ``closed``.  Didn't include those in the initial commit though.  Not sure if it was best to include them here, or do them separately. 


Labels:
name: Bug
name: Interval
description: Interval data type

Comments:
# [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/18340?src=pr&el=h1) Report
> Merging [#18340](https://codecov.io/gh/pandas-dev/pandas/pull/18340?src=pr&el=desc) into [master](https://codecov.io/gh/pandas-dev/pandas/commit/cfad581e9a6d35c7d05d2b1f34e4a19f7ee15cc6?src=pr&el=desc) will **decrease** coverage by `0.02%`.
> The diff coverage is `100%`.

[![Impacted file tree graph](https://codecov.io/gh/pandas-dev/pandas/pull/18340/graphs/tree.svg?height=150&width=650&src=pr&token=eZ4WkYLtcO)](https://codecov.io/gh/pandas-dev/pandas/pull/18340?src=pr&el=tree)

```diff
@@            Coverage Diff             @@
##           master   #18340      +/-   ##
==========================================
- Coverage   91.38%   91.36%   -0.03%     
==========================================
  Files         164      164              
  Lines       49790    49792       +2     
==========================================
- Hits        45501    45492       -9     
- Misses       4289     4300      +11
```

| Flag | Coverage Δ | |
|---|---|---|
| #multiple | `89.16% <100%> (-0.01%)` | :arrow_down: |
| #single | `39.49% <0%> (-0.07%)` | :arrow_down: |

| [Impacted Files](https://codecov.io/gh/pandas-dev/pandas/pull/18340?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [pandas/core/indexes/interval.py](https://codecov.io/gh/pandas-dev/pandas/pull/18340?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvaW5kZXhlcy9pbnRlcnZhbC5weQ==) | `92.52% <100%> (-0.34%)` | :arrow_down: |
| [pandas/io/gbq.py](https://codecov.io/gh/pandas-dev/pandas/pull/18340?src=pr&el=tree#diff-cGFuZGFzL2lvL2dicS5weQ==) | `25% <0%> (-58.34%)` | :arrow_down: |
| [pandas/core/frame.py](https://codecov.io/gh/pandas-dev/pandas/pull/18340?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvZnJhbWUucHk=) | `97.8% <0%> (-0.1%)` | :arrow_down: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/18340?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/18340?src=pr&el=footer). Last update [cfad581...c3b6f53](https://codecov.io/gh/pandas-dev/pandas/pull/18340?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).

> I also went through unrelated IntervalIndex tests and where it was straighforward parametrized over closed. Didn't include those in the initial commit though. Not sure if it was best to include them here, or do them separately

happy to have this. (inline adding tests is almost always ok)
lgtm.

@shoyer can you give this a once over
thanks @jschendel nice PRs as always. keep em coming!