Prevent clock drift by setting target

Constructor accepts a date object instead of a number of seconds to
count to/from. On flipping we calculate the time to change to from the
target/source date instead of decrementing/incrementing seconds. This
way we eliminate clock drift (relative to system clock).
Fix logic errors. Support countup