Implement more basic traits for the marker types.
auto merge of #19007 : huonw/rust/more-marker-impls, r=alexcrichton

Useful for #[deriving].
Remove duplicate code by using util::copy()
Return proper errors with update_err