TaskScheduler.add() no longer throws if date is in the past (closes #45)

TaskScheduler.add() no longer throws if date is in the past. Instead, the
task will be executed as soon as possible, asynchronously. The previous
behavior was a source of race conditions.