Bug 1088381- [Calendar] simplify time controller logic

this work depends on #25948 so **please don't merge it!!** I still need to rebase it after it gets r+

### overview

simplified the `timeController` logic by moving all the busytime/event cache into the `dayObserver` while also reducing the amount of DB queries, improving the startup performance by ~250ms (compared to old month view + timeController) and also improved the performance while switching between months.

the main difference of the `dayObserver` from the old `timeController` is that we always listen to busytimes/event changes for a single day and don't need to worry about different *scales*. (which is way simpler to render)

the new cache logic is still more complex than I wanted it to be (specially because of the link between `event <==> busytime`) but it removed the need of the `IntervalTree`, reduced the amount of LOC drastically (631 additions and 1,968 deletions) and improved the app performance; so I think it was a good improvement.

PS: you can ignore the first commit (`ce50596 wip: use dayObserver for month view`) since that is basically the same work as #25948..
ooops.. before I was passing `startDate` and `endDate`, now that it's a single date it only need to check `!cachedSpans.some(s => s.contains(date))` once..