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
ISO 8601 does not allow for the negative `Duration` primarily because time duration is defined over two (either specified or unspecified) time instants. ISO 8601 also has support for time intervals with one time instant and duration, but it distinguishes two possible cases with the order of each components: `P3D/2014-07-25` or `2014-07-22/P3D`. Ultimately, whatever we choose, the representation for negative `Duration` would be arbitrary. I do agree that the current representation is not very readable though; I'll change it if necessary.

The number of digits in fractional components is not bounded in ISO 8601. 3, 6 and 9 digits are enforced just for making correspondences with milliseconds, microseconds and nanoseconds respectively.