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 don't have a copy of ISO 8601 itself, but http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a003169814.htm suggests that a negative duration actually is valid, with the `-` preceding the `P` (basically, just as I suggested).

It also suggests that the fractional component in the final value may only have either 1-3 digits (for "basic" notation) or 1-6 digits (for "extended" notation). I don't know what the difference is between basic and extended, but this does suggest that having 9 digits (for nanoseconds) might actually not be valid.