Fixed the bug that caused timeline movement to be lost on tab change

Previously, if the user panned or zoomed the timeline, and then switched
tabs, the timeline would be reset back to match the date range in the
page header.  The correct behavior is for the timeline to snap to the
date range in the page header only if the user (a) reloads the page or
(b) changes the date range in the page header.

I fixed this bug by adding a field to the Calendar object that records
whether the time range has been updated, by page refresh or change to
the date range.  This field is set to true whenever the range is
updated, and set to false whenever the timeline is snapped to that
range.  Furthermore, the timeline is only snapped to range if the
updated field is true.  This ensures that simply changing tabs doesn't
cause a snap to range, but refreshing the page or changing the date
range with calendar navigation actions does.

I also combined this new field with the start and end fields that were
previously on the Calendar object, to create a single timeRange field.
This is just a small refactoring for clarity, not a change in
functionality.  This change would work equally well if I had added a
timeRangeUpdated field to the Calendar object, updated the value in
appropriate places, and not touched Calendar.start or Calendar.end.