DST coercions and DST fields in structs

The commits are not quite stand alone, I should probably squash them together before landing. In particular if you review the individual commits, then you'll see some scrappy stuff that gets fixed in later commits. But reading the commits in order might be easier to get an overall idea of what is going on.

The first commit includes putting back time zone into our time library - @pcwalton removed that as part of his de-~str'ing, but I had already converted it to use StrBuf, so we may as well leave it in. Update: no longer, this is removed in a later commit.
here and elsewhere: Does the `<expr> as <type>` syntax work yet for coercing a sized type to an unsized one?

E.g. could we here instead write `assert_eq!(&[&1,&2,&3] as &[_], n.iter().collect::<Vec<&int>>().as_slice());` ?

I am not sure if it would actually make things look nicer, but it might help stress that a coercion is happening here, not just a type assertion.