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

Precursor for #37320

Refactor ``pandas/io/formats/info.py`` to simplify further introduction of ``Series.info``.
Basically what is done here:
 - Move docstring to ``BaseInfo`` from ``DataFrameInfo`` - supposedly will be shared with ``SeriesInfo``
 - Move ``col_count``, ``ids`` from ``BaseInfo`` to ``DataFrameInfo`` (will not be relevant to ``SeriesInfo``)
 - Move ``memory_usage_bytes`` to ``DataFrameInfo`` (will have different implementation for ``SeriesInfo``)
 - Extract ``InfoPrinterAbstract``. Concrete classes will differ by the ``_create_table_builder``
 - Move common methods and properties from ``DataFrameTableBuilder`` to ``TableBuilderAbstract``
 - Extract ``TableBuilderVerboseMixin`` from ``DataFrameTableBuilderVerbose`` as the generator functions there will be used for verbose series info builders

I suggest moving the substitution decorator for the docstring from ``pandas/core/frame.py`` to ``pandas/io/formats/info.py`` later on in a separate PR.
Got some irrelevant error in CI Check.

```
mypy --version
mypy 0.782
Performing static analysis using mypy
pandas/core/indexes/datetimelike.py:776: error: Argument 1 to "_simple_new" of "DatetimeIndexOpsMixin" has incompatible type "Union[ExtensionArray, Any]"; expected "Union[DatetimeArray, TimedeltaArray, PeriodArray]"  [arg-type]
Found 1 error in 1 file (checked 1119 source files)
``` > Got some irrelevant error in CI Check.

fixed on master