REF: dataframe formatters/outputs
- [ ] closes #xxxx
- [x] tests added / passed
- [x] passes `black pandas`
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [ ] whatsnew entry

Partially addresses #36407

This is a continuation of https://github.com/pandas-dev/pandas/pull/36434.

- Separated ``StringFormatter`` (or better ``ConsoleFormatter``?) from ``DataFrameFormatter``. Placed it into the new module (subject to discussion).
- Used composition of ``DataFrameFormatter`` in ``HTMLFormatter``, ``LatexFormatter``, ``CSVFormatter`` and ``StringFormatter``. It turned out that the inheritance of each of the formatters from the base ``DataFrameFormatter`` was too complicated to comprehend. The composition seems to suit here better.
- Created new class ``DataFrameRenderer`` to keep methods for outputs in each of the formats.

This is not the ultimate refactoring, but just one more step.
