This improves on the former naive version for "moon phase" while (I
think) keeping the test time independant.
Hopefully the addition of the built up regexes works as intended to keep
it readable and maintainable.
On the other hand, it doesn't do anything about proving that the given
answer is correct or even internally consistent. I am not sure how to
do that within the testing environment constraints.
Also adds an abstract to reduce `dzil test` scroll spam.