Fix the clusterfuck that was the task scheduler

It's still a clusterfuck. This adds a next_run column to the database
which I'm still on the fence about actually needing. I used it to cover
up some erratic behavior I was seeing from strtotime() where if you were
asking for a time before it happened, (Wednesday at 8:00pm), you would
get the proper timestamp, but asking for Wednesday at 8:00pm after it
happened would, seemingly randomly, return either the Wednesday at
8 that had just elapsed *OR* the next, coming Wednesday at 8pm..
Which introduced a bug where a task may or may not run if the crontask
was run after the trigger time... Ugh.. This isn't even coherent.

BUT NOW. It seems to actually work. The projected and scheduled times
shown in schedules/:id are actually the times when messages get sent.
The CronLib now gives the go-ahead to send a message if the scheduled
time has passed BUT the last run time is still earlier than the next run.
This way, if the next_run column fails to update, it won't endlessly
re-run every time cron runs becasue next_run is eternally in the past.
Granted, if the last_run column also fails to update, it *will* endlessly
loop. So yeah, IDK. I think all the DB stuff can actually be ridden of.