Change the type of Day from string to time.Time
Eliminate the Day type.  Just use time.Time.

Eliminate TimeDay().  Just use start_of_day().
Rename the TemplateDay type to Day
split_by_day shifts from [][]Event to []Day
Don't copy Days in generate_report().

Just use the ones from split_by_day().
Move first-day-stuffing into a separate function
Rename TemplateData -> Report
Move template stuff to a separate function.

Short main().  Yay!