libstd’s Duration refactor

This commit changes the internal representation of Duration from

    pub struct Duraion {
        secs: i64,
        nanos: i32
    }

to

    pub struct Duration {
        millis: i64, // Milliseconds
        nanos:  i32, // Nanoseconds, |nanos| < NANOS_PER_MILLI
    }
This derived `Rand` is incorrect: an arbitrary random `i32` `x` is highly likely to have `|x| >= NANOS_PER_MILLI` violating the restriction on `nanos`.