BUG: styler multiindex hiding indexes and columns alignment
#### Follows #43686

- [x] closes #43637 
- [x] closes #43644
- [x] closes #43703
- [x] tests added / passed
- [x] whatsnew entry (note part of the bug seems to have been created by hiding `levels` which is a new feature in 1.4.0).

This PR has two parts:

1) Addressing the bug fixes as per above.

The key change made here was to add a single line: `if r not in self.hidden_rows:` in the loop, and in `_translate_latex` update for the new object structure that is input to it.

2) Refactoring the code so that the main part of the code is now easier to grok:

```
def _translate(...):
    # calls _translate_header()
    # callls _translate_body()

def _translate_header(...):
   # calls _generate_col_header_row()
   # calls _generate_index_names_row()

def _translate_body(...):
   # calls _generate_trimmed_row()
   # calls _generate_body_row()
```







And tests were update and comprehensive tests for the issues added.
because of moving the hiding functions to outer loop:

```
before           after         ratio
     [cd13e3a4]       [75de033c]
     <master>         <bug_styler_multiindex_hiding>
-      11.2±0.1ms       9.44±0.3ms     0.85  io.style.Render.time_apply_format_hide_render(24, 12)
-     6.57±0.09ms      5.39±0.06ms     0.82  io.style.Render.time_apply_format_hide_render(12, 12)
-        19.2±7ms       12.2±0.2ms     0.64  io.style.Render.time_apply_format_hide_render(36, 12)
-      45.1±0.6ms       20.7±0.5ms     0.46  io.style.Render.time_apply_format_hide_render(24, 120)
-        26.6±3ms       11.9±0.5ms     0.45  io.style.Render.time_apply_format_hide_render(12, 120)
-      68.6±0.8ms       28.8±0.2ms     0.42  io.style.Render.time_apply_format_hide_render(36, 120)

SOME BENCHMARKS HAVE CHANGED SIGNIFICANTLY.
PERFORMANCE INCREASED.

``` thanks!