[ArrayManager] DataFrame constructors
xref https://github.com/pandas-dev/pandas/issues/39146

In this PR, I am trying to ensure what when we construct a DataFrame, we directly construct the proper manager (depending on the option settings) instead of converting at the end of the constructor (as is done now). To that end, I am passing through a keyword to indicate the type of the manager to be created to the different internal construction methods like `arrays_to_mgr` etc.
@jbrockmendel other comments? lgtm cc @jreback @jreback more answers / comments here? All good here? (this is blocking a few other PRs that are mostly ready: https://github.com/pandas-dev/pandas/pull/39700, https://github.com/pandas-dev/pandas/pull/40050) Moving the datetime wrapping into the ArrayManager constructor revealed some other issues, so first doing a precursor for this here -> https://github.com/pandas-dev/pandas/pull/40147 https://github.com/pandas-dev/pandas/pull/40147 is merged, so updated this (I think the only remaining discussion item was about where the datetime wrapping happened, which is resolved by https://github.com/pandas-dev/pandas/pull/40147)