std: Add a Duration type

Taken from rust-chrono[1]. Needed for timers per #11189.
Experimental.

[1]: https://github.com/lifthrasiir/rust-chrono
std: Rename sleep, periodic, and oneshot timers to sleep_ms, etc.

Rename io::timer::sleep, Timer::sleep, Timer::oneshot,
Timer::periodic, to sleep_ms, oneshot_ms, periodic_ms. These functions
all take an integer and interpret it as milliseconds.

Replacement functions will be added that take Duration.

[breaking-change]
std: Add sleep, oneshot and periodic timers, taking Duration
std: Add comments to the time module
std: Update Duration from upstream

From rust-chrono 4f34003e03e259bd5cbda0cb4d35325861307cc6
std: Change time::MAX to time::MAX_DURATION, etc.
std: Remove ms-taking methods from timers
std: Remove the `zero` constructor from `Duration`

This is a workaround for having to write `Zero::zero` and will
be solved at the language level someday.
std: Restore missing timer examples
std: Clarify what timers do with zero and negative durations

Add tests. Also fix a bunch of broken time tests.
std: Make the TCP/UDP connect_timeout methods take Duration

[breaking-change]
std: connect_timeout requires a positive Duration

This is only breaking if you were previously specifying a duration
of zero for some mysterious reason.

[breaking-change]
std: Refactor time module a bit

Put `Duration` in `time::duration`, where the two constants can
be called just `MAX` and `MIN`. Reexport from `time`.
This provides more room for the time module to expand.
Fix compiletest to use Duration
Fix various fallout from timer changes
std: Make connect_timeout return Err on zero duration

[breaking-change]
std: Improve Duration comments
std: Remove Duration::new/new_opt/to_tuple

These all expose the underlying data representation and are
not the most convenient way of instantiation anyway.
std: Fix build errors
Update docs