Derive scheduling collection name

I made two changes here:
1. Any resource that implements DiscretePrincipal returns a DAV:resourcetype of DAV:principal.
2. Currently the scheduling collection name is hard-coded in the DefaultCalendarSearchService as "cals". The AnnoCalendarHomeResource automatically creates the scheduling inbox and outbox resources, but may not represent a resource with the name "cals". In this case, the CALDAV:schedule-inbox-URL and CALDAV:schedule-outbox-URL property on the principal resource is incorrect and leads to 404 errors when syncing with the Mac Calendar application.

I considered several alternatives for fixing this problem. My first thought was to just add an annotation to allow the implementer to override the name of the scheduling collection to match whatever they used for the calendars home collections. However, since the AnnoCalendarsHomeResource is responsible for automatically generating the inbox and outbox resources AND knows the name of the resource that it is wrapping, it seemed fitting that it should just return the correct value for the name of the scheduling collection.

I was concerned about preserving backwards compatibility, so I added new interfaces rather than adding properties/methods to existing ones. So, I created two new interfaces. CalDavSchedulingPrincipal is a CalDavPrincipal that additionally knows the scheduling inbox and outbox URL's. SchedulingHomeResource is a  type of resource that contains the inbox and outbox resources and can return their names for the purpose of calculating the URL's.

AnnoCalendarHomeResource now implements SchedulingHomeResource and currently returns the inbox and outbox name specified in the CalendarSearchService that it has a reference to. We might at some point want to still add annotations to allow the inbox/outbox names to be customized.

AnnoPrincipalResource now implements CalDavSchedulingPrincipal. It calculates the inbox/outbox URL's by searching through it's immediate children for a resource that implements the SchedulingHomeResource interface. It then take the principal URL for it's self and appends the name of the scheduling home resource followed by the name of the inbox/outbox as returned by the scheduling home resource.

Again, to preserve backwards compatibility I left the logic in place in CalDavProtocol.Schedule[Inbox|Outbox]Property#getValue() that derives the inbox/outbox name directly from the principal URL and calendar search service if the resource is not a CalDavSchedulingPrincipal or does not return a URL.

Some oddities of this approach:
========================
1. CalendarSearchService#getSchedulingColName() for annotated resources.
2. SchedulingHomeResource has no meaning for non-annotated resources. A non-annotated implementation must implement CalDavSchedulingPrincipal or CalendarSearchService to return inbox/outbox url's with a non-default scheduling collection name.