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
I can't decide if it's appropriate for `Show` to be the ISO 8601 duration format when `Duration` can be negative and ISO 8601 can't. Especially because it's actually unclear what a format like `P-23DT5S`means; is that (-23 days) + 5 seconds, or -(23 days + 5 seconds)?

At the very least, a negative `Duration` should perhaps instead have a leading `-` before the `P` and then everything else can be calculated from the absolute value of the receiver. That way the output is "ISO 8601 format, optionally preceded by a negation sign".