pd.Series.apply can't be made to produce Series of expected dtype when base series is empty
#### Code Sample

```python

df = pd.DataFrame(data=[3], columns=['colA'], dtype=int)
print(df.colA.dtype)
#> dtype('int64')

# Here things are as expected. A `Series` of dtype=bool is produced
res = df.colA.apply(lambda row: True)
print(res.dtype)
#> dtype('bool')

df = pd.DataFrame(columns=['colA'], dtype=int)
print(df.colA.dtype)
#> dtype('int64')

# Here colA is empty. As a result, a `Series` of dtype=int64 is produced
res = df.colA.apply(lambda row: True)
print(res.dtype)
#> dtype('int64')
```
#### Problem description
 
May be related to #28427.

When calling `apply()` on a series, you expect to get back a series with a certain `dtype` based on the function you give it. However, if the base `Series` is empty, there is nothing to apply the function to, so the resultant `Series` just has the same `dtype` as the base. 
My actual use case is more along the lines of this:

```python

import pandas as pd
import datetime

# Is a List[datetime.datetime], but could be empty
datetime_data = [datetime.datetime.now()]
# datetime_data = []

df = pd.DataFrame(data=[False for i in range(len(datetime_data))], columns=['colA'], index=pd.DatetimeIndex(datetime_data))

df['colB'] = df.index.to_series().apply(lambda x: True if x > datetime.datetime.now() else False)

start_dt = datetime.datetime.now() - datetime.timedelta(days=5)
end_dt = datetime.datetime.now() + datetime.timedelta(days=5)
new_dt_range = pd.date_range(start_dt, end_dt)
df = df.reindex(new_dt_range, fill_value=True)

# If you run this, it will work. But uncomment the empty list datetime_data, and you get:

#> TypeError: Cannot convert input [True] of type <type 'bool'> to Timestamp

```

I would have thought there would be a way to force the type of the return value of `.apply` even when the base vector is empty. You can obviously get around this easily by checking whether the base is empty when you assign `colB`:

```python
df['colB'] = df.index.to_series().apply(lambda row: True if row > datetime.datetime.now() else False) if not df.empty else True
```

Which coerces the `dtype` without setting any values, and that seems hacky and it feels like it should be possible to just make apply do the right thing.

#### Output of ``pd.show_versions()``

<details>

INSTALLED VERSIONS
------------------
commit           : None
python           : 3.7.2.final.0
python-bits      : 64
OS               : Darwin
OS-release       : 18.7.0
machine          : x86_64
processor        : i386
byteorder        : little
LC_ALL           : None
LANG             : en_GB.UTF-8
LOCALE           : en_GB.UTF-8

pandas           : 0.25.3
numpy            : 1.17.3
pytz             : 2019.3
dateutil         : 2.8.0
pip              : 18.1
setuptools       : 40.6.3
Cython           : None
pytest           : None
hypothesis       : None
sphinx           : None
blosc            : None
feather          : None
xlsxwriter       : None
lxml.etree       : None
html5lib         : None
pymysql          : None
psycopg2         : None
jinja2           : None
IPython          : 7.9.0
pandas_datareader: None
bs4              : None
bottleneck       : None
fastparquet      : None
gcsfs            : None
lxml.etree       : None
matplotlib       : None
numexpr          : None
odfpy            : None
openpyxl         : None
pandas_gbq       : None
pyarrow          : None
pytables         : None
s3fs             : None
scipy            : None
sqlalchemy       : None
tables           : None
xarray           : None
xlrd             : None
xlwt             : None
xlsxwriter       : None
</details>
