[caldav] Allow different OAuth2 providers for authentication

Previously, only Google authentication was supported.
This commit changes the plugin so that it can also load the oauth2
keys for providers other than Google.
[caldav] Fix possible memory leak

If an error occurs while retrieving or decoding the stored key,
but memory for the stored key has already been allocated, the plugin
previously leaked that memory.

This commit checks the pointer and frees it if required.
[caldav] Load dates between a valid date range

Previously, the plugin did not load incidences into calendar memory
from storage during a valid date range.
This commit ensures that incidences between 6 months ago and 12 months
in the future are loaded into calendar memory from storage prior to
sync.
[caldav] Decrease the window of possible missed updates

Previously, the plugin added thirty seconds to the previously recorded
last syccessful sync time, and used that timestamp when determining
which changes had occurred since last sync.  This meant that there
existed a window of 30 seconds within which updates would be "lost"
and not detected during the sync process.

This commit reduces the window down to 2 seconds (selected to be long
enough to allow database commit fs syncs to complete, but short enough
to reduce the chance of missed updates by a very significant factor).
[caldav] Use UTC time specification where possible

This commit changes the plugin to use UTC time specification instead
of LocalZone time specification where applicable, in order to be
more interoperable with services which assume UTC.