date_range need behave more humanized.
#### Code Sample, a copy-pastable example if possible

For example 

```python
start_date = '2019-03-02'
end_date = '2019-03-03'

h = pd.DataFrame(index=pd.date_range(start_date, end_date, freq='H', closed='left') )
d = pd.DataFrame(index=pd.date_range(start_date, end_date, freq='D', closed='left') )

assert len(d.asfreq('H').ffill().index) == len(h.index)
```

When `freq='H'`  last index would be `2019-03-03 00:00:00` .
Usually we need ` closed='left'` , make last index be  `2019-03-02 23:00:00`

When `freq='D'` , last index would be `2019-03-03` . It is fine to use ` closed='left'` too.

But, if I need `s.asfreq('H').ffill()`,  it would not result same index as `pd.DataFrame(index=pd.date_range(start_date, end_date, freq='H', closed='left' ))`

I mean, people usually use  `2019-03-03` as   `2019-03-02 23:59:59 599999`  if they assign freq='H' . 


Try to imagine, we have a dataset, I need analyze how it perform on day , hour  and minute level.
The end day is 2019-03-03,so  we need align `M` , `H`, `D` with same end  `2019-03-03` .Current behavious is not convenient for it.  I think this should be a built-in feature.

Maybe add an option to `close_freq='H' `  . 
Which means 
```
from datetime import timedelta
end_date = pd.to_datetime(end_date) - timedelta(hours=1)
```

Would be good with default `end_date = pd.to_datetime(end_date) - timedelta(microseconds=1)`



