REF: simplify latex formatting
- [x] closes https://github.com/pandas-dev/pandas/issues/35790
- [x] tests added ``pandas/tests/io/formats/test_latex.py``
- [x] passes `black pandas`
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`

Refactor ``to_latex`` using polymorphism and the builder design pattern.

Polymorphism
--------------

Previously there was a complicated logic in multiple methods
for either longtable or regular table.
This PR implements various builders:
  - ``RegularTableBuilder``
  - ``LongTableBuilder``
  - ``TabularBuilder``

Selection of the appropriate builder is carried out in ``LatexFormatter``,
depending on the kwargs provided.

Each builder must implement construction of all the table's components:
  - Beginning and end of the environment,
  - Separators (top, middle, bottom),
  - Header,
  - Body.

This allows one eliminate complex logic throughout multiple methods.

Separate Concerns
------------------

Separated concerns: row formatting into string (separate class ``RowStringConverter``)
is carried out independently of the table builder.
Derived from ``RowStringConverter`` are two classes used to iterate over headers or body of the tables:
  - ``RowHeaderIterator``
  - ``RowBodyIterator``

Extract Methods
----------------

Multiple methods were extracted to improve code readability.

What is not covered by the tests are the abstract methods.

```
    @property
    @abstractmethod
    def env_end(self):
        pass
```
I think that the best thing is to setup coverage in such a way to ignore simple pass in the function.
Alternatively I can simply put a docstring there, which will be considered by the bot as a check.

The methods removed (actually one, ``_write_tabular_begin``) and renamed (``_print_cline`` -> ``_compose_cline``) are internal implementation. Do I need to keep them and mark deprecated? They are not used anywhere else.

Also, do you want me to add docstrings for the internal methods? Or only public ones?
I mean, it is probably not reasonable to add docstrings to ``_escape_symbols`` or ``_convert_to_bold``.
Unless required. @jreback, is there anything else to be done from my side? It seems that I covered all the points you raised previously. Hello @ivanovmg! Thanks for updating this PR. We checked the lines you've touched for [PEP 8](https://www.python.org/dev/peps/pep-0008) issues, and found:







There are currently no PEP 8 issues detected in this Pull Request. Cheers! :beers: 

##### Comment last updated at 2020-09-06 17:57:25 UTC Can anybody restart the task Windows py37_np16?
It is unlikely that the failure in ``TestPandasContainer.test_to_s3`` is anyhow related to the present PR. thanks @ivanovmg for this, very nice!