API: add EA._from_scalars / stricter casting of result values back to EA dtype 
Closes #33254 
Closes #31108

This adds a ``ExtensionArray._from_scalars`` function which is more strict than the existing `_from_sequence` constructor: in theory, it should only accept a sequence of scalars of its own type (i.e. the type you get with `arr[0]`, plus NAs), or arrays with the appropriate dtype.

This can then be used in a context where we try to create an EA of the original dtype (in an attempt to preserve the original dtype), but we don't want to *coerce* any value to that dtype.

**Note**: this is a WIP PR, which mostly adds *dummy* implementations of this method, just to mimic the desired behaviour for now, to be able to explore how this would work. 
If this turns out to be working, we will need to make better implementations for `_from_scalars` for our own EAs.

Apart from that, this needs tests, docs, etc. But let's first discuss semantics.

* [ ] Add tests for example case from https://github.com/pandas-dev/pandas/issues/31108, period case from https://github.com/pandas-dev/pandas/pull/38254, test case for categorical with non-categories
* [ ] Reopen https://github.com/pandas-dev/pandas/pull/30282 once this is merged