Represent enums with regular structs; no more alignment-breaking casts.
auto merge of #5356 : jld/rust/enum-less-magic, r=graydon

Fixes #1645.