BUG: inconsistent behaviour when grouping DataFrame by week and month, as compared to minutes, hours and days??
In computer science, we always try to design algorithms and procedures in a logically consistent manner so that other people can follow easily without making wrong assumptions. For example, when we group dates into intervals, for every group we can choose to use either the left or the right boundary to label that group. So if you decide to choose the left timestamp to label every interval, then you should do it for all types of intervals.

However, this is not so in Pandas.
```
>>> stmp=pd.to_datetime('2021-01-01 09:31:04.34')
>>> [print(sc, list(pd.DataFrame({'a':0}, index=[stmp]).groupby(pd.Grouper(freq=sc)))[0][0]) for sc in ['s', 'min', 'H', 'D', '7D', 'W', 'M', 'Y']]
s 2021-01-01 09:31:04
min 2021-01-01 09:31:00
H 2021-01-01 09:00:00
D 2021-01-01 00:00:00
7D 2021-01-01 00:00:00
W 2021-01-03 00:00:00
M 2021-01-31 00:00:00
Y 2021-12-31 00:00:00
```
As you can see above, when grouping into seconds, minutes, hours, days, weeks and months respectively:
- for seconds, minutes, hours and days, the group time label lies to the left of the sample
- but for weeks, months and years, the group time label lies to the right the sample, what is even worse is that the boundary does not align to the beginning of the next interval, rather, it aligns to the beginning of the last day in the interval, which is even more weird (does it mean the last day of a month/year belongs to the next month/year??? absolutely non-sense)
In general, we can group dates by arbitrary interval, e.g., 10.5 days or 1.5 weeks (some astronomical events monitoring can leads to such use case). This inconsistency is going to cause errors in applications based on human assumption because who the hell will know that for weeks, months, and years, the library decide to do it differently from the rest??