API: many custom errors / warnings are not exposed in pandas.errors
From https://github.com/pandas-dev/pandas/issues/27553 and https://github.com/pandas-dev/pandas/issues/27522, I quickly looked at how consistent we are with defining errors and warnings in `pandas.errors`.

So we have a `pandas.errors` module which is meant to publicly expose our custom exceptions and warnings.

Some are defined there such as PerformanceWarning, UnsortedIndexError, ParserError, ... (https://github.com/pandas-dev/pandas/blob/bb6135880e5e453d7701764b9f2e4ad3356a68d7/pandas/errors/__init__.py). 
But many are not:

* tslibs.parsing.DateParseError
* tslibs.period.IncompatibleFrequency
* pandas/_config/config.py: OptionError
* pandas/core/base.py: DataError, GroupByError, SpeciicationError
* pandas/core/common.py: SettingWithCopyError/Warning
* pandas/core/computation/common/py: NameResolutionError
* pandas/core/computation/engine.py: NumExprClobberingError
* pandas/core/computation/ops.py: UndefinedVariableError
* pandas/core/indexes/base.py: InvalidIndexError
* pandas/coreindexing.py: IndexingError
* pandas/io/clipboard/exceptions.py: PyperclipException
* pandas/io/formats/css.py: CSSWarning
* pandas/io/msgpack: several exceptions
* pandas/io/pytables.py: lots of exceptions
* pandas/io/sql.py: SQLALchemyRequired, DatabaseError
* pandas/io/stata.py: several warnings

Do we want to move them all to the public `pandas.errors` module? 
Are there reasons that some can / should not be moved? Eg should the cython ones be defined in the cython file for performance? 
Are there certain custom exceptions/warnings that we rather convert in a built-in one instead of publicly exposing them? 
Do we want to move all the io related ones? (those modules are somewhat public)