calendar file backend: support removing parent event with CALOBJ_MOD_THIS
calendar file backend: support removing parent event with CALOBJ_MOD_THIS

It was possible to create a meeting series with just a detached event
(RECURRENCE-ID set) by importing a meeting invitation for that single
recurrence. It was not possible to arrive at that same state after
adding the parent event (the one with the RRULE) because
e_cal_remove_object_with_mod() removed all instances for
CALOBJ_MOD_THIS and empty rid.

This contradicts the intended semantic of e_cal_remove_object_with_mod():
 "By using a combination of the @uid, @rid and @mod
 arguments, you can remove specific instances. If what you want
 is to remove all instances, use e_cal_remove_object instead."

This patch implements the desired semantic:
- e_cal_backend_file_remove_object(CALOBJ_MOD_THIS) now always
  calls remove_instance().
- remove_instance() was extended to also work for the parent
  event.
- That call removes the complete object if nothing is left
  after removing the instance. This case must be handled by
  the caller. The return value is the original object (if
  it still exists) and NULL if not.
- Because the uid pointer into the object may become invalid
  as part of the removal, a more permanent pointer has to
  be provided by the caller.

tintou/evolution-data-server,tintou/evolution-data-server,Distrotech/evolution-data-server,gcampax/evolution-data-server,gcampax/evolution-data-server,matzipan/evolution-data-server,tintou/evolution-data-server,matzipan/evolution-data-server,matzipan/evolution-data-server,gcampax/evolution-data-server,matzipan/evolution-data-server,gcampax/evolution-data-server,matzipan/evolution-data-server,Distrotech/evolution-data-server,Distrotech/evolution-data-server,tintou/evolution-data-server,Distrotech/evolution-data-server,Distrotech/evolution-data-server