Fix calendar date leaks

We found a bug in the calendar class which persists the dates from one request in the calendar output of another. 

It feels cleaner to separate out the definition of the calendar and the state of the calendar in each request. This pull request creates a new class, `CalendarState`, which contains the dates and a pointer to the wider state of the flow.