Refactored date code, improved crystal ball mechanics

+   datePrompt() function
      Functionally it's the date routines that previously existed in the
    genPrompt() function. I split it off into its own handler because
    it turns out it's impossible to do unit testing when they're
    twisted together like that, which makes fixing date bugs too messy.

    +   Vastly improved crystal ball (date prediction)
          Extended recent versions' auto-filling of tomorrow's date with
        date prediction based on the weekday chosen in the first prompt.
          If you pick a weekday after tomorrow in the list it works out
        the difference based on position and gets the appropriate data
        to auto-fill. If you pick a date before tomorrow in the list,
        say Tuesday when tomorrow's Thursday, it assumes you mean that
        day of the upcoming week.

    +   Month boundaries on weekends now handled using date objects
          Saturday edition dates now rely on the built-in date methods
        to calculate Sunday's date, month and year. This is replaces
        the verbose, explicit code used before that checked for specific
        cases (30/31 day months, Feb 28/28, December 31).
          There is now only one Saturday 'set pageDate' line, with empty
        strings swapped out for the appropriate data (and extra format-
        ting) when a month boundary is encountered.

-   Remove special Arts pages case
      The Arts desk now has weekday, weekend and ahead pages set. It
    appears like this is a waste of characters, but it allows the
    special checking at the end of genPrompt() to be removed and
    makes changing the arts options as easy as for any other desk
    should they suddenly gain a load of pages, for example.

~   Simplified setting theTitle
      Since it's either "[desk] pages generator" or "Custom edition".