Consider a Holiday class

The implementation of this Holiday class enables an individual calendar implementer to more accurately describe each holiday using a first-class object. These changes demonstrate how the use of such a class gives more flexibility about the definition of each holiday, including when it is observed.

As a result, this fixes (or provides a mechanism to fix) #76, #77, and #78.

As much as possible, these changes attempt to maintain backward compatibility, but it's plausible that some users will find the changes incompatible with their customizations.

All the tests pass (on Python 3 at least).

I'm not necessarily requesting that these changes be merged as-is, but I did want to collect these changes as a concrete proposal for consideration and discussion. Accepting changes like these would be essential for me to adopt workalendar for my application.

I look forward to your feedback.