Add Duration type to std and use it in Timer methods.

Currently, the Timer methods take an integer number of ms. This is considered a bug because a) types, b) some timers have ns precision.

This plucks the `Duration` type from [rust-chrono](https://github.com/lifthrasiir/rust-chrono), plops it into `std::time`,  and replaces the arguments to `sleep`, `oneshot`, and `periodic` timers with it. It leaves the old methods intact as `sleep_ms`, `oneshot_ms`, and `periodic_ms`, for convenience.

Closes https://github.com/rust-lang/rust/issues/11189.

cc @lifthrasiir @aturon @kballard @alexcrichton
There's precedence for the name `NSEC_PER_SEC`, so it might make sense to use that here.

Why `SECS_PER_DAY`? You're not using a static for the other durations, you're using magic numbers instead. `NSEC_PER_SEC` makes sense because it's easy to lose track of the right number of zeros, but the numbers like `60`, `3600`, `86400` are much more recognizable and don't necessarily need a static. If you want to keep this static, then you should add ones for `60`, `3600`. You should also add e.g. `MSEC_PER_NSEC` and `USEC_PER_SEC` instead of using magic numbers there as well.