Revise Calendar class heirarchy

Too many interfaces were being used to describe spans of time, when
it's far better (and more useful) to describe all dates as spans and
provide more specific functions for more specific or well-recognized
spans (like months and years).  This cleans things up immensely and
pushes common functionality into base classes.  It also means all date
spans have the same interface, so things like iteration and checking
for ranges and containment are uniform.