Handling of `end` in date_range
The documentation of `date_range`'s `end` parameter says:
```
      If periods is none, generated index will extend to first conforming
      time on or just past end argument
```

I interpret this to mean that either:
1. the last date in the index will be on or past the given end date, or that
2. the last period will include the given end date.

The first interpretation is clearly not true.

```python
>>> pandas.date_range(start='2017-01-01', end='2017-01-16', freq='7d')
DatetimeIndex(['2017-01-01', '2017-01-08', '2017-01-15'], dtype='datetime64[ns]', freq='7D')
```

But it seems like the second is not certainly true either:

```python
>>> pandas.date_range(start='2017-01-01', end='2017-01-16', freq='M')
DatetimeIndex([], dtype='datetime64[ns]', freq='M')
>>> pandas.date_range(start='2017-01-01', end='2017-02-16', freq='M')
DatetimeIndex(['2017-01-31'], dtype='datetime64[ns]', freq='M')
```

I am not sure if the behaviour with this unequal freq (like `M` which should extract the beginning of the month) is correct. Is this a bug?

Otherwise the documentation needs clarification.

More generally, it seems like the implementation is inegalitarian between starts and ends: you can't easily construct a `DatetimeIndex` based on `freq` which certainly includes `end`. One approach you could consider is to swap `start` and `end`, but without changing `freq` this produces an empty `DatetimeIndex`. Negating `freq` is possible if it has a unit (e.g. `-7d`) but I don't think there's a way to get get `freq='M'` backwards.

```python
>>> pandas.date_range(end='2017-01-01', start='2017-02-16', freq='M')
DatetimeIndex([], dtype='datetime64[ns]', freq='M')
>>> pandas.date_range(end='2017-01-01', start='2017-02-16', freq='-M')
Traceback (most recent call last):
  File "/Users/joel/repos/pandas/pandas/tseries/frequencies.py", line 549, in to_offset
    stride = int(stride)
ValueError: invalid literal for int() with base 10: '-'
```

So three potential sub-issues:
1. Clarify docs for `date_range`'s `end` (and related `end` params).
2. Check that behaviour regarding end with `DateOffset`s is intended.
3. A way to easily make `date_range` that starts at an endpoint and applies a `DateOffset` in reverse. (Perhaps this is the same as 2.)