API: handling of invalid datetimes in constructors
Triggered by the regression reported in https://github.com/pandas-dev/pandas/issues/26206  and my attempt to fix it (https://github.com/pandas-dev/pandas/pull/26848), I looked a bit into how our different constructors handle different cases of invalid datetimes.

Out of bound datetimes (cases: a non-ns unit numpy datetime64 array, datetime.datetime objects, strings):
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>M8[D] out of bound</th>
      <th>datetime.datetime out of bound</th>
      <th>list of M8[D] scalars out of bound</th>
      <th>string out of bound</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>dateframe</th>
      <td>datetime64[ns] 1842-11-22 0 ...</td>
      <td>object</td>
      <td>object</td>
      <td>object</td>
    </tr>
    <tr>
      <th>datetimeindex</th>
      <td>OutOfBoundsDatetime</td>
      <td>OutOfBoundsDatetime</td>
      <td>OutOfBoundsDatetime</td>
      <td>OutOfBoundsDatetime</td>
    </tr>
    <tr>
      <th>index</th>
      <td>OutOfBoundsDatetime</td>
      <td>object</td>
      <td>object</td>
      <td>object</td>
    </tr>
    <tr>
      <th>index (explicit dtype)</th>
      <td>OutOfBoundsDatetime</td>
      <td>OutOfBoundsDatetime</td>
      <td>OutOfBoundsDatetime</td>
      <td>OutOfBoundsDatetime</td>
    </tr>
    <tr>
      <th>pd.to_datetime</th>
      <td>OutOfBoundsDatetime</td>
      <td>OutOfBoundsDatetime</td>
      <td>OutOfBoundsDatetime</td>
      <td>OutOfBoundsDatetime</td>
    </tr>
    <tr>
      <th>series</th>
      <td>datetime64[ns] 1842-11-22 0 ...</td>
      <td>object</td>
      <td>object</td>
      <td>object</td>
    </tr>
    <tr>
      <th>series (explicit dtype)</th>
      <td>datetime64[ns] 1842-11-22 0 ...</td>
      <td>datetime64[ns] 1842-11-22 0 ...</td>
      <td>datetime64[ns] 1842-11-22 0 ...</td>
      <td>datetime64[ns] 1842-11-22 0 ...</td>
    </tr>
  </tbody>
</table>

Some remarks here:

* The above table is for master (and the same for 0.24). However, on pandas 0.22, the case of out of bounds datetime64 array raised an error in all cases (so also for Series(..), that's https://github.com/pandas-dev/pandas/issues/26206).
* For `to_datetime`, all the OutOfBounds are expected, as the default is to error.
* For the ones with a specified dtype (either explicit dtype passed or DatetimeIndex), we also expect an error. So DatetimeIndex and Index(.., dtype='M8[ns]') are fine, but `Series(.., dtype='M8[ns])` is clearly broken (gives an incorrect date for all cases)
* The inconsistencies are mainly when no dtype is enforced. In some cases (eg for datetime.datetime objects) we return a object dtype Index/Series, in other cases we raise an error. 

The last item is the **main question**: when inferring (no dtype enforced) and in case the data are clearly timestamps (either numpy datetime64 or datetime.datetime), should we raise an error or return object dtype.

Note that for datetime.datetime, returning object dtype might be more logical as it means returning the input as is. While for datetime64[non-ns], it actually means converting a numpy dtype to object data.

