BUG: Fix MI repr with long names
Closes #21180 

```python
In [4]:         try:
   ...:             from unittest import mock
   ...:         except ImportError:
   ...:             mock = pytest.importorskip("mock")
   ...:
   ...:         terminal_size = os.terminal_size((118, 96))
   ...:         p1 = mock.patch('pandas.io.formats.console.get_terminal_size',
   ...:                         return_value=terminal_size)
   ...:         p2 = mock.patch('pandas.io.formats.format.get_terminal_size',
   ...:                         return_value=terminal_size)
   ...:
   ...:         index = range(5)
   ...:         columns = pd.MultiIndex.from_tuples([
   ...:             ('This is a long title with > 37 chars.', 'cat'),
   ...:             ('This is a loooooonger title with > 43 chars.', 'dog'),
   ...:         ])
   ...:         df = pd.DataFrame(1, index=index, columns=columns)
   ...:
   ...:

In [5]: with p1, p2:
   ...:     print('-' * 80)
   ...:     print(repr(df))
   ...:     print('-' * 80)
   ...:
```

output:

```
--------------------------------------------------------------------------------
  ...
  ...
0 ...
1 ...
2 ...
3 ...
4 ...

[5 rows x 2 columns]
--------------------------------------------------------------------------------
```

This matches the repr for non-hierarchical

```python
In [6]: s = pd.DataFrame({"A" * 41: [1, 2], 'B' * 41: [1, 2]})

In [7]: with p1, p2:
   ...:     print('-' * 80)
   ...:     print(repr(s))
   ...:     print('-' * 80)
   ...:
```

output:

```
--------------------------------------------------------------------------------
  ...
0 ...
1 ...

[2 rows x 2 columns]
--------------------------------------------------------------------------------
```

These can certainly be improved, though I'm not sure we'll (I'll) get to it for 0.23.2.