Email only once at the beginning of an extended outage.

Two timeouts or errors in a row counts as an extended outage.
Simplify different state-based delays into just one unified period.
Upon detecting a change, send N notifications, then quit.

The user will have to act fast, so there's no point in running
forever after a change is detected: just send a user-specified
number of notifications at user-specified intervals, then exit.

(Another reason for making this change is that it'll work much
better with pay-per-use notification types, like sending an SMS.
Support for those to be added in a future commit.)
Permit the user to run with no email notifications.

Also move the email command-line options from arguments to options
specified with --email from@example.com,to@example.com.

Currently not a very useful change, but it will be once I add Twilio
SMS notifications.
Use optparse-applicative's native showDefault parser settings.
Minor help description change.
Make sure period, notifications and wait option values are > 0.
Switch from String to (strict) Text wherever possible.
Remove now-unnecessary command-line option check.
Parse Twilio configuration from config file and command line.

Note: doesn't actually *do* anything with the Twilio configuration yet.

Authentication info goes in the config file (by default, ~/.wwdcc).
SMS from/to phone numbers are specified on the command line. The
authentication info cannot be specified on the command line as
it would be visible to anyone who runs 'ps'.
Support for SMS notifications via Twilio.

Uses Twilio configuration from previous checkin.

Missing some error-checking, that's to come.
Fix parser for --config option.
Gracefully handle broken config files.
Exit with error if --sms is provided, but incomplete Twilio config.
Send activation email in  main, to test email functionality.

If it's broken, inform the user and quit.
More startup exception handling.

Catch any exception in startup email.

Exit if startup SMS fails.
Re-arrange some code; no functional changes.
When an exception/error occurs, send a notification(s) and exit.

This should alert the user in case the program dies unexpectedly,
assuming notifications can get out.
Superficial cleanup, no functional changes.
Set default log level to WARNING.