Before we get to actually doing calendar stuff, or time zone stuff, there's a whole bunch of support classes that need to be implemented. Things like day, week, month, year, day_month, etc.
This patch implements the first chunk of those.
Apologies for the size of the patch, but (like the <span> stuff), it's 90+% tests.
Including this file with Clang 6.0 in C++2a mode causes a compile error because of "-Wreserved-user-defined-literal". We need to wrap this block with: