remove the hard-coded migration ID from setup.sh
refactor the mail setup scripts

As the scripts keep growing, it's time to split them up to
keep them understandable.

This splits mail.sh into mail-postfix.sh, mail-dovecot.sh,
and mail-users.sh, which has all of the user database-related
configurations shared by Dovecot and Postfix. Also from
spamassassin.sh the core sieve configuration is moved into
mail-dovecot.sh and the virtual transport setting is moved
into mail-postfix.sh.

Also revising one of the sed scripts in mail-dovecot to
not insert a new additional # at the start of a line each
time the script is run.
use the Dovecot managesieve service to manage sieve scripts

This lets roundcube's manageseive plugin do cool things like vacation responses.

Also:

* Run the spam filtering sieve script out of a global sieve file that we'll place in /etc/dovecot. It is no longer necessary to create per-user sieve files for this. Remove them with a new migration. Remove the code that created them.

* Corrects the spam script. Backslashes were double-escaped probably because this script started embedded within the bash script. Not sure how this was working until now.

this adapts work by @h8h in #103
Roundcube's classic skin is nicer
z-push: an Exchange ActiveSync server
add z-push to the start script
Fixed validate_email not accepting catchalls (empty local part of the address)
Prohibited usage of empty local part for validate_email(email, strict = true)
Merge pull request #105 from jonessen96/master

Fix validate_email not accepting catchalls (empty local part of the address)
re-do catch-all aliases, fixes #107 (originally #104)

This reverts pull request #105 from jonessen96/master (84d2023f94a6b1f6d9b761ff0550789d629a665d) which was incorrect because it lost the "+" in DOT_ATOM_TEXT and so was not accepting any email addresses.

Am taking the opportunity to make the code cleaner while I'm here.
Use $STORAGE_ROOT

Better to use $STORAGE_ROOT instead of hardcoded /home/user-data/
Merge pull request #111 from h8h/patch-1

Output SSL Cert Fingerprint can point to a wrong dir: Better to use $STORAGE_ROOT
Vagrant typo
refuse to start if the system has less than 768 MB of RAM, except when testing within Vagrant
move the welcome message to after the system checks
check that we're running as root before doing anything
hide lots of unnecessary and scary output during setup
whats_next: move the admin alias check to the system section
add a comment
write explanatory text as we build DNS zones so we can help the user manage DNS off of the box