API: Honor copy for dict-input in DataFrame
Closes https://github.com/pandas-dev/pandas/issues/32960.

~Still need a whatsnew. The tl/dr is~

1. We can't honor no-copy for a dict with multiple values of the same dtype: `DataFrame({"A": np.array([1, 2]), "B": np.array([1, 2])})` as long as we have consolidation.
~2. Currently, this is an API breaking change for something like `pd.DataFrame({"A": np.array([1, 2])})`. To resolve that, I think we'll need something like a default of `copy=None`, and then require `copy=False` to enable no-copy for dict inputs (but keep no copy by default for 2d ndarrays and data frames).~

Unsure how we're going to reconcile that with the behavior of EAs.

EDIT: I've changed the default `copy` to `None`, which means

1. no copy for ndarray / dataframe input (`copy=True` to copy)
2. copy for dict input (`copy=False` to not copy).