API: pseudo-public internals API for downstream libraries
Downstream libraries accessing core.internals causes headaches pretty regularly  (https://github.com/pandas-dev/pandas/pull/40149#discussion_r585699450, #38134,).  The proposal: define a public-ish stable-ish API to expose for these libraries, leaving us free-er to make changes in internals.

This exposes `make_block`.  I expect we'll also need to expose one or both of `create_block_manager_from_arrays`/`create_block_manager_from_blocks` (comment in `internals.__init__` says they are there for downstream xref #33892)

> can you add a test which exercises this from a downstream author POV (e.g. create an manipulate things, e.g. like what pyarrow is doing), but only do this by importing the new api you are establishing so they can't cheat

i think the way to do this is to rename the internal version, then our existing downstream/io tests will test for this Thanks, it's probably a good idea to make a public-ish `make_block`, so you are more free to make changes/optimizations to the one used internally. Now, then we do need to add tests for this, because it won't longer be tested through our own test suite.

In pyarrow, we currently make use of `BlockManager(..)` constructor as well. And further, we access `CategoricalBlock`, `DatetimeTZBlock` etc, but only as object, eg for `isinstance(block, ObjectBlock)` (never calling the `__init__` of those). Now, I suppose that we could remove this usage (instead of checking for CategoricalBlock, we could also check that `block.values` is a Categorical, for example)