REF: Back IntervalArray by array instead of Index
The benefit I have in mind here is that we could back it by a single 2xN array and a) avoid the kludge needed to make `__setitem__` atomic, b) do a view to get native types for e.g uniqueness checks, c) possibly share some methods with NDarrayBackedExtensionArray.

Also just in principle having EAs not depend on Index is preferable dependency-structure-wise.

cc @jschendel 
AFAICT remaining test failures are on from arrow cc @jorisvandenbossche are the pyarrow failures here something we can address on our end? It are our own tests (testing the conversion that is implemented in pandas itself), so that's something that need to be fixed in this PR.

Looking at the failure, it seems that setting a missing value in an IntervalArray does not/no longer set a missing value in both left and right arrays. But looking at the changes in `__setitem__` in the diff, I don't directly see why that would be the case. Nice idea, +1 to changing the storage.

We shouldn't change `IntervalArray.left` from an index to ndarray without warning. I'm fine with just continuing to return an Index. Or if we really want to change it we can deprecate `IntervalArray.left` in favor of `IntervalArray.left_array`. i think comments have been addressed, LMK if i missed anything this is marked POC, but i assume want to merge it?
 > this is marked POC, but i assume want to merge it?

Yes, updated the title. any more comments here? > This should improve the performance of IntervalArray.__setitem__, right? That could be added in the release notes.

```
In [2]: ii = pd.IntervalIndex.from_breaks([0, 1, 2, 3, 4]) 
In [3]: ia = ii._data                                                           
In [4]: val = ia[0]                                                             

In [5]: %timeit ia[-1] = val                                                    
38.4 µs ± 1.74 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)  # <-- master
23.9 µs ± 335 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)  # <-- PR
```

note added to whatsnew. updated per comments